有没有办法将DataGridView绑定到Dictionary并使用键作为列?

时间:2017-02-13 15:20:14

标签: c# dictionary data-binding datagridview bindingsource

有没有办法将DataGridView绑定到Dictionary并使用Keys作为列?

例如我有类似的东西:

var items = new Dictionary<string, List<int>>();
items.Add("Column 1", new List<int>{ 1, 2, 3 });
items.Add("Column 2", new List<int>{ 1, 2, 3 });
items.Add("Column 3", new List<int>{ 1, 2, 3 });

我希望看到类似的东西:

[ Column 1] [ Column 2] [ Column 3]
1           1           1
2           2           2
3           3           3

我尝试将简单字典转换为动态对象:

dynamic itemsData = new ExpandoObject();

IDictionary<string, object> items = (IDictionary<string, object>)itemsData;
items.Add("Column 1", new List<int>{ 1, 2, 3, 4, 5 });
items.Add("Column 2", new List<int>{ 1, 2, 3, 4, 5 });
items.Add("Column 3", new List<int>{ 1, 2, 3, 4, 5 });

bindingSource1.DataSource = itemsData;
dataGridView1.DataSource = bindingSource1;

但是没有效果,我得到了结果:

[ Key]    [ Value ]
Column 1  System.Collect...
Column 2  System.Collect...
Column 3  System.Collect...

感谢。

1 个答案:

答案 0 :(得分:0)

我不认为,你可以将字典绑定到DataGridView。为了将对象绑定到DataGridView的DataSource,该对象应该实现IList,ListSource但是Dictionary不会。

一种解决方法是将字典转换为数据表并将其绑定到DataGridView。

表列名为Column1,Column2 ----- ColumnN并创建相应的行数。

注意:转换开销可能会影响性能。