BindingList的主要特點在於,它可以在加入新的元素或者元素髮生修改的時候觸發相應的事件,而在基本集合類中是不具有這些功能的,而且由於在基本集合中Add方法不是Virtual方法,要想讓它觸發事件還真不是很方便。不過BindingList可以很好的滿足你的功能。
在Windows表單編程中,使用DataGridView可以很方便與數據庫查詢結果綁定,但是有時候查出來的數據需要經過一番處理才顯示,這時候就不能直接綁定了。藉助於BindingList,你便可以很方便得實現這個功能。
BindingList是一個泛型容器,可以直接賦值給DataGridView的DataSource。而且以後的數據變化,只需要維護BindingList裏的東西就行了,DataGridView自動更新數據顯示。
最近做項目中突然發現還有個BindingList可以使用。查了不少信息。得出底下幾點結論:
壓根不是同一樣東西,從命名空間中就能發現,一個是Component下的東西。主要特點在於Component的相關。另一個是Collection命名空間下的產物。主要用於集合相關。
BindingList比List多的功能問爲但他是GridView的數據源時,他有Allow.... Sort...等方法。從名字中可以看出對於該數據的一些約束。List比BindingList多的方法比如,AddRange方法,我之前項目中使用BindingList時需要將2個BindingList合併,卻找不到方法。當然他可能有其他的方法而我不知道而已。
最後,BindingList和List並無任何關係不存在繼承關係。個人建議,處理邏輯時用List,但作爲數據源綁定是用BindingList.
使用BindingList綁定datagridview開發應用,只要如下即可:
BindingList<T> x = new BindingList<T>();
.... datagridivew1.datasource = x;
datagridiew1.columns["name'].DataPropertyName = "Name";
... T = datagridview1.selectedrows[0].boundItem as T;
列表控件的信息就可以和對象集合的信息“同步”,但經過檢查發現,這個同步是單向的,列表控件數據變更或增加,可以通過事件通知到對象集合,而對象集合內的數據變更或增減列表控件無法變更,(後來試驗了一下,有時需要對datagridview進行刷新纔會更新,但對象增減應該可以同步)而且我在檢查其代碼時發現瞭如下有趣現象:
1. 如果列表控件使用了cellvalidating事件,在出現e.cancel=true時, 系統會經常報錯,估計是後面的對象清單取消操作時的問題
2 . BindingList本身不具備排序功能,如果重寫applysort方法,需要處理一堆問題.
所以簡單的操作用bindinglist很方便,如果是複雜操作,可能就有問題。
https://www.cnblogs.com/louisding/archive/2011/01/18/2763702.html