最近有同事迷上了使用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很方便,如果是複雜操作,可能就有問題。