2012-12-18 79 views
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事件每次都会被触发,并且正在对数据库进行不必要的查询。我想实现一个延迟,以便在程序开始查看数据库以获取更多信息之前,必须将行突出显示约半秒。但是我很难完成这个任务。这样做最好的方法是什么?

回答

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 

在你的计时器事件运行代码:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    FillCompanyAddressGrid() 
    FillCompanyDetail() 
    FillChildCompanyGrid() 
    FillPropertiesGrid() 
    Timer1.Enabled = False 
End Sub 
+0

+1:我只是懒得打出来。 –

+0

谢谢!这个伎俩。 – Cuthbert

1

拿一个定时器,经过500毫秒火灾(我个人认为,这将被证明是相当有点长,我会建议尝试在100毫秒至200毫秒范围的东西),每次用户选择行你只需重置计时器。

经过500毫秒后,计时器引发一个事件并提取数据。如果用户继续选择不同的行,则需要重新设置定时器,并且不会引发任何事件,直到选中一行至少500毫秒。

+0

+1你是对的约500毫秒太长了。谢谢。 – Cuthbert