KeyValuePair字典作为DataSource

时间:2014-03-25 16:50:07

标签: c# winforms data-binding dictionary datagridview

如果得到以下对象:

Dictionary<int,KeyValuePair<int,string>> myData;

现在我想将此数据分配给DataGrid。

将列的DataPropertyName设置为“Key”或“Value”的工作正常(包含Dictionary的Key(int)和Value(keyvaluepair)。

但我想在列中显示对的键和值。

colWhatever.DataPropertyName="Value.Value"似乎不起作用。

有没有办法做到这一点,还是我必须创建一个包含三个属性的类?

1 个答案:

答案 0 :(得分:1)

没有办法实现它。您可以使用ViewModel并绑定此viewmodel的List<T>,以获取示例:

创建ViewModel

public class DataViewModel
{
    public int Key { get; set; }
    public int ValueKey { get; set; }
    public string Value { get; set; }    
}

创建一种方法,将Dictionary<int,KeyValuePair<int,string>>转换为List<DataViewModel>

public static List<DataViewModel> Convert(Dictionary<int,KeyValuePair<int,string>> dic)
{
    return dic.Select(item => new DataViewModel() { Key = item.Key, ValueKey = item.Value.Key, Value = item.Value.Value }).ToList();
}

并将此列表应用于DataSource属性:

grid.DataSource = Convert(myData);

DataPropertyName上应用列表类型中的属性。

grid.DataPropertyName = "Value";