2 个网格控件中的 Devexpress 主从

Devexpress master-detail in 2 gridcontrols

如何在 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;

感谢您的任何建议。

我想你想要的是两个绑定源。您的第一个绑定源 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;