Winforms:如何将列表绑定到多个DataGridView

时间:2011-09-26 22:31:35

标签: c# winforms

我希望能够将List绑定到多个DataGridViews,以便通过其中一个gridview进行操作将传播到所有其他gridview。

List<Domain> data;

第一种方法:

BindingList<Domain> list = new ..;
data.ForEach( d => { list .Add(d); } );    

grid1.DataSource = list;
grid2.DataSource = list;

这不起作用。网格共享除数据之外的属性。

第二种方法:

BindingList<Domain> list1 = new ..;
BindingList<Domain> list2 = new ..;

data.ForEach( d => { list1.Add(d); list2.Add(d); } );    

grid1.DataSource = list1;
grid2.DataSource = list2;

此方法适用于更新。但是,添加和删除都不是预测的。

第3种方法:

BindingList<Domain> list = new ..;
data.ForEach( d => { list .Add(d); } );    

BindingSource ds1 = new BindingSource();
BindingSource ds2 = new BindingSource();
ds1.DataSource = list;
ds2.DataSource = list;

grid1.DataSource = ds1;
grid2.DataSource = ds2;

这会传播添加和删除,但是,当一个新行添加到1个视图但尚未提交时,所有其他网格中都会显示一个空行。似乎在编辑完成之前将新记录插入到列表中。

如何将多个datagridviews正确绑定到一个List? (这在Flex中非常容易。)我很感激任何对MDSN中相关部分的引用。

1 个答案:

答案 0 :(得分:0)

我做了一个小测试应用程序,只是为了确保以我记忆的方式共享绑定源。你可以找到它here(至少30天)。

我发现可能导致您的问题的是您的所有网格可能都启用了添加/删除行。 grid1中的新行显示为grid2中的新行,但grid2(非常不必要)在其下方显示模板行。

我在一个绑定源上创建了一个带有只读网格的主窗口,并在同一个绑定源上创建了一个带有可编辑网格的编辑对话框。绑定源是两者之间唯一的连线,没有事件处理来发信号更新,没有重新分配数据源。一切都完美同步,甚至是当前行(因为CurrencyManager)。对话框中的新行仅显示为“主”窗口中的一个空行。

希望这会有所帮助,并且不会过度简化。