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();
                }

             
        }

 

到此结束,谢谢!

 

 

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