【问题标题】:Devexpress master-detail in 2 gridcontrols2 个网格控件中的 Devexpress 主细节
【发布时间】:2016-02-03 01:22:41
【问题描述】:

如何在 2 个网格而不是 1 个网格中显示主从视图。 这是我当前填充网格的方式,它确实显示了主从视图。

如果使用 2 个网格控件创建与当前数据结构的关系,我不知道如何设置关系或 DataMember 属性(如一些使用数据库的示例所示)。

 public class Master
 {
      public int id { get; set; }
      public List<Sub> subs { get; set; }
 }

public class Sub
{
    public int id { get; set; }
    public string name { get; set; }
}

//filling some data for master and sub objects
private void FillData()
{
    master = new List<Master>();
    for (int i = 0; i < 10; i++) 
    {
        Master tmpmaster = new Master();
        tmpmaster.id = i;
        tmpmaster.name = "Master " + (i + 1).ToString();
        tmpmaster.subs = new List<Sub>();
        for(int j = 0; j < 5; j++)
        {
            Sub tmpsub = new Sub();
            tmpsub.id = j;
            tmpsub.name = "Sub " + (j + 1).ToString();
            tmpmaster.subs.Add(tmpsub);
        }
        master.Add(tmpmaster);
    }

}

FillData();
grid = new GridControl();
this.Controls.Add(grid);
grid.DataSource = master;

感谢您的任何建议。

【问题讨论】:

    标签: c# devexpress-windows-ui


    【解决方案1】:

    我认为你想要的是两个绑定源。您的第一个绑定源 bindingSourceMaster 将在设计时绑定到 Master

    bindingSourceMaster.DataSource = typeof(Master);
    

    然后您可以将您的第二个绑定源bindingSourceSub 绑定到bindingSourceMastersubs 属性。最简单的方法是在设计时这样:

    这将在 .Designer 文件中创建此代码:

    // 
    // bindingSourceSub
    // 
    this.bindingSourceSub.DataSource = this.subsBindingSource;
    // 
    // subsBindingSource
    // 
    this.subsBindingSource.DataMember = "subs";
    this.subsBindingSource.DataSource = this.bindingSourceMaster;
    

    (但不要担心——让设计师来做繁重的工作)

    gridControlMaster 的数据源为 bindingSourceMaster,gridControlSubs 的数据源为 bindingSourceSubs。

    从那里开始,.NET 和 Dev Express 将为您完成所有繁重的工作。将对象分配给 bindingSourceMaster 后,其他一切都会按预期工作:

    List<Master> _MasterList = GetMasterItems();
    
    bindingSourceMaster.DataSource = _MasterList;
    

    现在,当您更改gridControlMaster 中的活动记录时,您将看到gridControlSubs 自动显示所选主记录的相应详细记录:

    -- 编辑--

    这是我的假数据,值得一看:

    for (int i = 1; i < 100; i++)
    {
        Master m = new Master() { id = i, subs = new List<Sub>() };
    
        for (int j = 1; j < 20; j++)
        {
            Sub s = new Sub() { id = i * 1000 + j, name = Guid.NewGuid().ToString() };
            m.subs.Add(s);
        }
    
        master.Add(m);
    }
    
    bindingSourceMaster.DataSource = master;
    

    【讨论】:

    • 我刚刚注意到您的示例数据对于每个主数据都有相同的子数据...既然是这种情况,您甚至可能没有注意到它正在工作。我编辑了回复以向您展示我的虚假数据。
    • 太棒了,它工作得非常完美。是否可以在主网格中隐藏“+”?
    • 是的,你可以这样做。在gridViewMaster.OptionsView 下,如果你将ShowDetailButtons 设置为false,我相信这将实现你所寻求的。
    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多