如何在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;
感谢您的任何建议。
答案 0 :(得分:2)
我认为你想要的是两个绑定来源。您的第一个绑定来源bindingSourceMaster
将在设计时绑定到Master
:
bindingSourceMaster.DataSource = typeof(Master);
然后,您可以将第二个绑定源bindingSourceSub
绑定到subs
的{{1}}属性。最简单的方法是在设计时这样:
这将在.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
自动显示所选主记录的相应明细记录:
- 编辑 -
这是我的假数据,它的价值在哪里:
gridControlSubs