我有一个用VB.NET编写的应用程序,它生成一个Infragistics UltraGrid
,其中包含有关我从SQL数据库获取的公司的信息。当用户单击某一行时,会触发AfterRowActivate
事件,并在屏幕的下半部分显示该用户的更多信息。它做得很好,工作得很好。这是被称为的方法:
Private Sub grdCompany_AfterRowActivate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles grdCompany.AfterRowActivate
If (Not grdCompany.ActiveRow.IsGroupByRow) Then
If (grdCompany.ActiveRow.Cells("Company_id").Text <> "") Then
FillCompanyAddressGrid()
FillCompanyDetail()
FillChildCompanyGrid()
FillPropertiesGrid()
End If
End If
End Sub
用户倾向于使用箭头键快速滚动网格。因此AfterRowActivate
事件每次都会被触发,并且它会对数据库进行不必要的查询。我想实现一个延迟,以便在程序开始查找数据库之前必须突出显示该行大约半秒钟以获取更多信息。但是我在完成这项工作时遇到了麻烦。这样做最好的方法是什么?
答案 0 :(得分:2)
在表单上创建一个计时器 在网格AfterRowActive功能中,重置计时器:
Private Sub grdCompany_AfterRowActivate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles grdCompany.AfterRowActivate
If (Not grdCompany.ActiveRow.IsGroupByRow) Then
If (grdCompany.ActiveRow.Cells("Company_id").Text <> "") Then
Timer1.Enabled = False
Timer1.Enabled = True
End If
End If
End Sub
在您的Timer事件中运行代码:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
FillCompanyAddressGrid()
FillCompanyDetail()
FillChildCompanyGrid()
FillPropertiesGrid()
Timer1.Enabled = False
End Sub
答案 1 :(得分:1)
拿一个500毫秒后触发的计时器(我个人觉得这会有点长,我建议在100到200毫秒范围内尝试一下),每次用户选择一行你只需重置计时器。
在500毫秒后,计时器引发一个事件并获取数据。如果用户继续选择不同的行,则继续重置计时器,并且在选择一行至少500毫秒之前不会引发任何事件。