一、数据源为DataSet
自定义一个DataSet:
DataSet ds = new DataSet();
DataTable dt1 = new DataTable("A");
dt1.Columns.Add("id");
dt1.Columns.Add("姓名");
dt1.Rows.Add(new object[] { 1, "张三"});//添加行
dt1.Rows.Add(new object[] { 2, "李四"});//添加行
ds.Tables.Add(dt1);
DataTable dt2 = new DataTable("B");
dt2.Columns.Add("pid");
dt2.Columns.Add("家属姓名");
dt2.Columns.Add("id");
dt2.Rows.Add(new object[] {1,"张张",1});//添加行
dt2.Rows.Add(new object[] {2, "李七",2});//添加行
dt2.Rows.Add(new object[] { 3, "张六", 1 });//添加行
dt2.Rows.Add(new object[] { 4,"李李", 2 });//添加行
ds.Tables.Add(dt2);
DataTable dt3 = new DataTable("C");
dt3.Columns.Add("tid");
dt3.Columns.Add("电话");
dt3.Rows.Add(new object[] { 1, "1223" });//添加行
dt3.Rows.Add(new object[] { 2, "3345" });//添加行
ds.Tables.Add(dt3);
设定主从表关系:
DataRelation dr = new DataRelation("家属", ds.Tables["A"].Columns["id"], ds.Tables["B"].Columns["id"]);
//设定关系,ds.a(表).id(字段)=ds.b.id
DataRelation dr2 = new DataRelation("电话", ds.Tables["B"].Columns["pid"], ds.Tables["C"].Columns["tid"]);
ds.Relations.Add(dr);
ds.Relations.Add(dr2);
gridControl1.DataSource = ds.Tables["A"];//设定主表
运行显示:
二:数据源为List<T>
先构建一个主表类和一个从表类:
/// <summary>
/// 书橱主表类
/// </summary>
public class bookcase
{
public string id { get; set; }
public string bid { get; set; }
public string name { get; set; }
/// <summary>
/// books
/// </summary>
public List<book> books { get; set; }
}
/// <summary>
/// 书本从表类
/// </summary>
public class book
{
public string id { get; set; }
//书橱id
public string bookcase_bid { get; set; }
public string bookName { get; set; }
}
模拟数据绑定GridControl:
public void BindData()
{
//书橱(主表)
List<bookcase> ls_f = new List<bookcase>();
//书本(从表)
List<book> books = new List<book>();
//添加模拟数据
book bk1 = new book() { id = "1", bookcase_bid = "1", bookName = "语文"};
book bk2 = new book() { id = "2", bookcase_bid = "1", bookName = "数学" };
book bk3 = new book() { id = "3", bookcase_bid = "2", bookName = "英语" };
book bk4 = new book() { id = "4", bookcase_bid = "2", bookName = "历史" };
books.Add(bk1);
books.Add(bk2);
books.Add(bk3);
books.Add(bk4);
bookcase bkcase1 = new bookcase() { id = "1", bid = "1", name = "一"};
bookcase bkcase2 = new bookcase() { id = "2", bid = "2", name = "二" };
ls_f.Add(bkcase1);
ls_f.Add(bkcase2);
List<book> ls_p_f1 = books.Where(p => p.bookcase_bid == ls_f[0].bid).ToList();
List<book> ls_p_f2 = books.Where(p => p.bookcase_bid == ls_f[1].bid).ToList();
ls_f[0].books = ls_p_f1;
ls_f[1].books = ls_p_f2;
gridControl1.DataSource = ls_f;
}
结果显示:
展开和折叠:
折叠:
(gridControl1.MainView as GridView).CollapseAllDetails(); //要折叠主视图中的所有主控行
展开:
XtraGrid 没有提供为单个视图展开所有主控行的方法。 但是,可以编写程序来实现
public void ExpandAllRows(GridView view)
{
view.BeginUpdate();
try
{
int dataRowCount = view.DataRowCount;
for (int rHandle = 0; rHandle < dataRowCount; rHandle++)
view.SetMasterRowExpanded(rHandle, true);
}
finally
{
view.EndUpdate();
}
}