Dev中GridControl构建主从表

一、数据源为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();
    }
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值