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
绑定到 bindingSourceMaster
的 subs
属性。最简单的方法是在设计时这样:
这将在 .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;
如何在 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
绑定到 bindingSourceMaster
的 subs
属性。最简单的方法是在设计时这样:
这将在 .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;