我需要更新WinGrid(WinForms項目)附近標籤上的行數。行添加/刪除事件? (Infragistics Wingrid)
網格更新以不同的方式製成 - 數據源的變化,手動添加/ removs,SQL initialisations等
是否有一個普遍的事件,當電網發生變化的行數(數據源改變包括)提高呢?
我需要更新WinGrid(WinForms項目)附近標籤上的行數。行添加/刪除事件? (Infragistics Wingrid)
網格更新以不同的方式製成 - 數據源的變化,手動添加/ removs,SQL initialisations等
是否有一個普遍的事件,當電網發生變化的行數(數據源改變包括)提高呢?
最後,我手動確定將行添加到網格的位置,並更新coresponding計數標籤。
所以,我沒有使用網格事件。
在我的經驗中,沒有一個全局事件會在行數發生變化時被調用。
我對此的最佳解決方案是一個通用的方法,它將從可能修改顯示行數的各種事件中調用。
像這樣的事情
private void UpdateRowsCount(UltraGrid grd, string messageFmt = "Rows count: {0}")
{
labelRowCount.Text = string.Format(messageFmt, grd.Rows.FilteredInRowCount);
}
那麼應該如何處理事件:
,當然,在設置數據源之後。
grd.DataSource = myDataTable;
this.UpdateRowsCount(grd, "Customers count: {0}");
如果有人對這個問題有更好的認識,我會對其他方法非常感興趣。
我假設你綁定到一個列表,如BindingList或DataSet/DataTable的更改通知。如果您將項目添加到數據源並且它們顯示在網格中,那麼這必須是真實的,因爲網格依賴來自數據源的事件來知道它需要更新。
在這種情況下,您可以綁定到網格綁定列表的ListChanged事件。此事件是IBindingList interface的一部分。
如果您綁定到DataTable/DataSet,那麼您將需要使用DataTable的DefaultView公開的事件,因爲這是實現IBindingList和網格實際綁定的內容。
如果您使用的是實現INotifyCollectionChanged而不是IBindingList的集合,那麼您將使用CollectionChanged事件。如果您正在進行WPF開發,這將更有可能,因爲這是ObservableCollection用於更改通知的內容。
不幸的是,當數據源發生變化時,不會觸發「AfterRowInsert」,也無法手動添加行(grid.Rows.Add(...)) – serhio 2013-03-21 10:51:29
Infragistics論壇上有一個關於AfterRowInsert未激活的有趣線程。希望能幫助到你。 http://www.infragistics.com/community/forums/t/8218.aspx – Steve 2013-03-21 11:03:01
如果網格顯示來自數據源的更改,那麼網格綁定的列表將具有更改通知,您可以使用相關事件。對於實現IBindingList的列表,它是ListChanged事件。我在另一個答案中提供了更多細節。 – alhalama 2013-03-21 17:35:53