绑定一个DataGridView到一个二维集合

本文关键字:一个 二维 集合 绑定 DataGridView | 更新日期: 2023-09-27 18:18:18

"每隔几个月我都会用WinForms写一些东西来提醒自己为什么我讨厌它"(引用自另一个op)
我认为这将是相当直接的,但我是跛脚未能提出一些工作代码。

我只是想绑定一个DataGridView到"任何"方便的二维列表/集合/香蕉,
通过高效地(性能,延迟)访问第一维作为更新第二维作为数据。理想情况下,我需要一个字典,但它不是"可绑定的"本身。不用说,对绑定集合的任何更改都应该显示在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绑定到数组而不是实际的字典。因此,dic上的任何更改都不会在dgv上报告。

绑定一个DataGridView到一个二维集合

要做到这一点,你将不得不实现ITypedList和创建一个自定义PropertyDescriptor代表每一列(通常保持"键"或"索引"作为一个字段在描述符)。然后重写GetValue和SetValue以从集合中获取值。

我有一个转座子的例子,它可能对设置上下文有用——我会看看我是否能找到它。

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