2个网格控制中的Devexpress master-detail

时间:2016-02-03 01:22:41

标签: c# devexpress-windows-ui

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

如果使用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;

感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

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

bindingSourceMaster.DataSource = typeof(Master);

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

enter image description here

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

bindingSourceMaster

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

gridControlMaster的数据源将是bindingSourceMaster,而gridControlSubs的数据源将是bindingSourceSubs。

从那时起,.NET和Dev Express将为您完成所有繁重的工作。将对象分配给bindingSourceMaster后,其他所有内容都将按预期工作:

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

现在,当您更改List<Master> _MasterList = GetMasterItems(); bindingSourceMaster.DataSource = _MasterList; 中的有效记录时,您会看到gridControlMaster自动显示所选主记录的相应明细记录:

enter image description here

- 编辑 -

这是我的假数据,它的价值在哪里:

gridControlSubs