0

我有一个用 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事件每次都会被触发,并且会对数据库进行不必要的查询。我想实现一个延迟,以便在程序开始在数据库中查找更多信息之前,该行必须突出显示大约半秒。但我很难做到这一点。这样做的最佳方法是什么?

4

2 回答 2

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  
于 2012-12-18T20:11:57.920 回答
1

取一个在 500 毫秒后触发的计时器(我个人认为这会变得相当长,我建议尝试在 100 到 200 毫秒范围内的时间),每次用户选择一行时,您只需重置计时器。

500 毫秒后,计时器引发一个事件,然后您获取数据。如果用户不断选择不同的行,您会不断重置计时器,并且在选择一行至少 500 毫秒之前它不会引发任何事件。

于 2012-12-18T20:04:57.790 回答