2017年1月6日

Winform DataGrid Binding

    下面是程式中需要的Grid 欄位長相

     1. 新增Class並繼承INotifyPropertyChanged,實作其function

    2. INotifyPropertyChanged function,實作內容如下:
    3. 依照需要的欄位新增屬性(property),這個例子中用的是
        a. int Seq 
        b. String CartonID
    4. Property中set的部份呼叫OnPropertyChanged,範例如下:


    5. 注意,因為會比較過後,不同才trigger event,所以建構式中先給_seq和_carton初始值,因為string的初始值為null,不先設成空字串會丟出null例外。
    6. 因為Grid中的item常常做比較,以本例子來說比較只要Carton相等就相等,所以另外override了Equals。




    7. 在winform的程式中宣告集合使用Binding,型態為我們剛做好的class。

    8. 在form_laod事件中,先初始化此集合,再讓Grid的DataSource等於上面宣告的集合,就完成binding作業了;若沒有另外設定欄位的名字時,欄位名字會等同於Class中Property的名字,以此例中就是Seq、Carton。

    9. 用這種Binding方法的好處是,在程式中你可以不用管麻煩的grid,直接操作這個集合,Grid的內容就會跟著變動。

    10. 以下舉例:
        a. 新增:


        b. 刪除carton:


        c. 修改:(以修改seq為例)


        d. 當有function需要此集合的值時,你也不需要再轉換一次datagrid的資料,直接用linq或lambda expression取得就可以。



        e. 清空Grid:



    winform程式中有用到Grid的,可以試著用這個方法。

沒有留言: