Devexpress gridcontrol控件 MASTER-Detail 動態綁定DATSET的多級顯示列表

圖示效果如下:

1、DataSet作爲內存關聯數據庫  DataSet ds = new DataSet("DataSet");

    1.1將一級列表、二級列表(2個)、三級列表的所有DataTable加載到DataSet裏

         ds.Tables.AddRange(new DataTable[] { datatable1.Copy(),datatable2.Copy(),datatable3.Copy(),datatable2-1.Copy()});

 

     1.2 建立關聯約束

             一級列表和二級2表列表建立關聯,關聯字段DataColumn
            ds.Relations.Add("lv1-2關聯名稱",ds.Tables[0].Columns["單據編號"], ds.Tables[1].Columns["單據編號"],false);

           一級列表和二級3表列表建立關聯 ,關聯字段DataColumn

           ds.Relations.Add("lv1-3"關聯名稱, ds.Tables[0].Columns["單據編號"], ds.Tables[2].Columns["單據編號"], false);

           二級2表列表和三級列表建立關聯 ,關聯字段DataColumn

            ds.Relations.Add("lv2-2-1關聯名稱", ds.Tables[1].Columns["單據編號"], ds.Tables[3].Columns["單據編號"], false);

 

2、GridControl 添加 一級:gridview1(主列表MainView)

                                  二級:gridview2  \  gridview3

                                  三級:gridview2-1


                    gcList.ViewCollection.Add(gridview1);

                    gcList.ViewCollection.Add(gridview2);

                         gcList.ViewCollection.Add(gridview3);

                    gcList.ViewCollection.Add(gridview2-1);

 

     2.1 gridview(一級主列表MainView) 進行設置
                    //清單按鈕一直顯示
                   gridview.OptionsDetail.SmartDetailExpandButtonMode = DevExpress.XtraGrid.Views.Grid.DetailExpandButtonMode.AlwaysEnabled;
                    //無數據也可以點擊展開按鈕
                    gridview.OptionsDetail.AllowExpandEmptyDetails = true;

 

   2.2  gridview2(二級列表) 進行設置
                    //清單按鈕一直顯示
                   gridview.OptionsDetail.SmartDetailExpandButtonMode = DevExpress.XtraGrid.Views.Grid.DetailExpandButtonMode.AlwaysEnabled;
                    //無數據也可以點擊展開按鈕
                    gridview.OptionsDetail.AllowExpandEmptyDetails = true;

 

    2.3   添加gridcontrol的所有關聯名稱以及層級,必須和DataSet關聯名稱保存一致

                   gcList.LevelTree.Nodes.Add("lv1", detailPatternView);
                    gcList.LevelTree.Nodes.Add("lv2", detailPatternView2);

                     這裏是Nodes["lv1"]的層級下的關聯
                    gcList.LevelTree.Nodes["lv1"].Nodes.Add("lv3", detailPatternView_Detail);

 

     2.4  設置每個gridview的子級關聯名稱

                    gridview1.ChildGridLevelName = "lv1";
                    gridview1.ChildGridLevelName = "lv2";
                    gridview2.ChildGridLevelName = "lv3";

 

  3、DataSet裏的一級列表數據源綁定到gridcontrol 

            gcList.DataSource = ds.Tables[0];
                    

   4、GridView1的主列表展開時動態加載子級數據列表,用到MasterRowGetChildlist事件 

 private void GridView1_MasterRowGetChildList(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetChildListEventArgs e)
        {
         
            if (ds.Tables.Count > 1 && GridView1.GetRowCellValue(e.RowHandle, "單據編號") !=null)
            {

                  / /子級列表不存在數據就導入數據
               if( ds.Tables[1].Select("單據編號='"+ GridView1.GetRowCellValue(e.RowHandle, "單據編號").ToString() + "'").Count()==0)
                {
                    ds.Tables[1].Rows.Add(new object[] { gvList.GetRowCellValue(e.RowHandle, "單據編號").ToString(), e.RowHandle.ToString() }); ;

                      //一定記得提交數據更新動作,否則數據不顯示

                    ds.Tables[1].AcceptChanges();
                }

             
        }

 

到此結束,謝謝!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章