2012-08-16 169 views
0

在我的應用程序中使用datagridview有一些巨大的延遲。我需要每秒更新一次狀態消息,大約3000行在datagridview中。每秒更新DataGridView

我目前使用更新的代碼是:

private void UpdateProxies() 
    { 
     Invoke(new MethodInvoker(
         delegate 
         { 
          this.dgvProxies.DoubleBuffered(true); 
          this.dgvProxies.SuspendLayout(); 
          this.dgvProxies.DataSource = null; 
          this.dgvProxies.DataSource = this.Proxies; 
          this.dgvProxies.ResumeLayout(); 
          this.dgvProxies.Refresh(); 
         } 
         )); 
    } 

我曾試圖刪除自動調整大小的屬性,並啓用雙緩衝..還是非常 laggy

任何想法如何,我可以加速它的向上?

+0

你可以更新數據源中的對象還是每次都需要銷燬並重新創建它們?如果你可以更新它們,你可以在它們上面使用INotifyPropertyChanged,並且網格會更新它需要的單元而不需要重新綁定到任何東西。與集合本身相同,您可以使用ObservableCollection,並且數據網格應該在需要時處理更改。 – Belmiris 2012-08-16 20:18:40

+1

嘗試只更新用戶可以看到的行。 – LarsTech 2012-08-16 20:19:43

回答

0

我認爲這樣做是不可能的。 3k行是巨大的工作量。我建議你嘗試改變方法。

  • 只顯示用戶當前正在查看的行以及用於滾動的一些緩衝區。當用戶滾動時進行動態加載。
  • 進行增量更新。檢測數據中的更改並添加新行或插入它,或者刪除或做任何相應的數據更改。避免將所有數據綁定到datagridview。
+0

我將如何實施一個解決方案,只顯示用戶正在看到的數據?然後在滾動時更新它? – gwenda 2012-08-16 20:20:16

+0

您只能綁定部分數據。進行臨時收集。有OnScroll事件http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.onscroll.aspx。你可以把它連接起來,並在配對上進行數據選擇來滾動。 – dantix 2012-08-16 20:23:06