绑定字典到Datagridview

本文关键字:Datagridview 字典 绑定 | 更新日期: 2023-09-27 18:14:34

我想将字典绑定到datagridview。不幸的是,Dictionary没有实现所需的接口,所以我创建了一个List>。

本质上我希望这是绑定到一个datagridviewcomboboxcolumns的datagridview。第1列保存键,第2列保存值

我已经尝试了很多变化,但我似乎不能得到这个正确的。我已经尝试绑定到列、单个单元格和datagridview本身。有人知道怎么做吗?

编辑:澄清它没有绑定到问题所在的对象。它似乎绑定到列表,例如,如果我在列表中有4个项目,那么添加4行,但是值是空的。下面是示例代码:

additionalMetadata1.dataGridView1.DataSource = animal.AdditionalMetaData;
        foreach (DataGridViewRow row in additionalMetadata1.dataGridView1.Rows)
        {
            DataGridViewCustomComboCell cell = row.Cells[0] as DataGridViewCustomComboCell;
            cell.DataSource = animal.AdditionalMetaData;
            ((DataGridViewCustomComboColumn)additionalMetadata1.dataGridView1.Columns[0]).DisplayMember = "Key";
            ((DataGridViewCustomComboColumn)additionalMetadata1.dataGridView1.Columns[0]).ValueMember = "Key";
            ((DataGridViewCustomComboColumn)additionalMetadata1.dataGridView1.Columns[0]).DataPropertyName = "Key";
         }

谢谢。

绑定字典到Datagridview

你可以使用下面的Linq:

 dataGridView.DataSource =  (from d in dictionary
                             orderby d.Value
                             select new
                              {
                               d.Key,
                               d.Value
                             }).ToList();

这将创建一个匿名对象,它将保存键和值作为属性。请注意,字典在默认情况下没有特定的顺序。

试一下

dataGridView1.ColumnCount = 2;
foreach (KeyValuePair<string, string> kvp in dict) {
    string[] arow = new string[] { kvp.Key, kvp.Value };
    dataGridView1.Rows.Add(arow);
}

dataGridView1.DataSource = dict.ToArray();

dataGridView1.DataSource = dict.Select((kv => new {
    myKeys = kv.Key,
    myValues = kv.Value
})).ToArray();