2013-03-21 79 views
0

我需要更新WinGrid(WinForms項目)附近標籤上的行數。行添加/刪除事件? (Infragistics Wingrid)

網格更新以不同的方式製成 - 數據源的變化,手動添加/ removs,SQL initialisations等

是否有一個普遍的事件,當電網發生變化的行數(數據源改變包括)提高呢?

回答

0

最後,我手動確定將行添加到網格的位置,並更新coresponding計數標籤。

所以,我沒有使用網格事件。

0

在我的經驗中,沒有一個全局事件會在行數發生變化時被調用。
我對此的最佳解決方案是一個通用的方法,它將從可能修改顯示行數的各種事件中調用。

像這樣的事情

private void UpdateRowsCount(UltraGrid grd, string messageFmt = "Rows count: {0}") 
{ 
    labelRowCount.Text = string.Format(messageFmt, grd.Rows.FilteredInRowCount); 
} 

那麼應該如何處理事件:

  • grd_AfterRowFilterChanged //如果你有篩選啓用
  • grd_AfterRowsDeleted
  • grd_AfterRowInsert
  • 別忘了這

,當然,在設置數據源之後。

grd.DataSource = myDataTable; 
this.UpdateRowsCount(grd, "Customers count: {0}"); 

如果有人對這個問題有更好的認識,我會對其他方法非常感興趣。

+0

不幸的是,當數據源發生變化時,不會觸發「AfterRowInsert」,也無法手動添加行(grid.Rows.Add(...)) – serhio 2013-03-21 10:51:29

+0

Infragistics論壇上有一個關於AfterRowInsert未激活的有趣線程。希望能幫助到你。 http://www.infragistics.com/community/forums/t/8218.aspx – Steve 2013-03-21 11:03:01

+0

如果網格顯示來自數據源的更改,那麼網格綁定的列表將具有更改通知,您可以使用相關事件。對於實現IBindingList的列表,它是ListChanged事件。我在另一個答案中提供了更多細節。 – alhalama 2013-03-21 17:35:53

1

我假設你綁定到一個列表,如BindingList或DataSet/DataTable的更改通知。如果您將項目添加到數據源並且它們顯示在網格中,那麼這必須是真實的,因爲網格依賴來自數據源的事件來知道它需要更新。

在這種情況下,您可以綁定到網格綁定列表的ListChanged事件。此事件是IBindingList interface的一部分。

如果您綁定到DataTable/DataSet,那麼您將需要使用DataTable的DefaultView公開的事件,因爲這是實現IBindingList和網格實際綁定的內容。

如果您使用的是實現INotifyCollectionChanged而不是IBindingList的集合,那麼您將使用CollectionChanged事件。如果您正在進行WPF開發,這將更有可能,因爲這是ObservableCollection用於更改通知的內容。

+0

這對於過濾操作也是如此? – Steve 2013-03-21 17:38:58

+0

如果您正在使用過濾,那麼在這種情況下不會更新,因爲數據源不會更改。如果這是一個要求,那麼你可以使用ListChanged事件和網格的AfterRowFilterChanged事件,然後調用每個會更新標籤的方法 – alhalama 2013-03-21 17:45:07