将DataGridView绑定到2维集合

时间:2011-12-16 19:14:13

标签: c# winforms datagrid

我每隔几个月就会在WinForms中写一些东西来提醒自己为什么讨厌它”(引自另一个操作)
我认为这会非常简单,但我很遗憾没有提出一些有效的代码。

我只想将DataGridView绑定到“ANY”方便的二维列表/集合/香蕉,
AND 以高效率高效(性能,延迟)更新该集合,以密钥访问第一维,将第二维更新为数据。理想情况下,我需要一个词典,但它不是“可绑定的”本身。 不用说,绑定集合的任何更改都应显示在DGV上。

只要我能有效地访问集合上的“密钥”来更新行,那么将2维扩展到N维将是可观的。

问题示例

var g = this.dataGridView1;
var s = new Dictionary<string, string>();
s.Add("1", "Test1");
s.Add("2", "Test2");
s.Add("3", "Test3");
g.DataSource = s.ToArray();

这里的问题是toArray()转换使dgv绑定到数组而不是实际的字典。因此,不会在dgv上报告对dic的任何更改。

1 个答案:

答案 0 :(得分:1)

为此,您必须实现ITypedList并创建表示每列的自定义PropertyDescriptor(通常将“key”或“index”保留为描述符中的字段)。然后重写GetValue和SetValue以从集合中获取值。

我有一个转换器的例子可能对设置上下文很有用 - 会看看我是否能找到它。

对于双向通知,您需要实现IBindingList和列表更改事件。