圖示效果如下:
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();
}
}
到此結束,謝謝!