2012-12-18 114 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