是否可以自动将Dictionary绑定到Gridview?我最接近的是:
Dictionary<string, myObject> MyDictionary = new Dictionary<string, myObject>();
// Populate MyDictionary here.
Grid1.DataSource = MyDictionary.Values;
Grid1.DataBind();
这会将myObject中的属性绑定到gridview,但我也想获取密钥。如果不可能,是否有替代方案,例如使用中继器?感谢。
答案 0 :(得分:3)
您可以使用:
var data = MyDictionary.Select(x => new List<object>{x.Key, x.Value});
这将为您提供IEnumerable<List<object>>
,IEnumerable
代表“行”,每行List<object>
代表“列”。
如果myObject
是集合类型,则会略有不同。我无法确定您的代码,但看起来并非如此。
答案 1 :(得分:2)
我相信你需要将列绑定到“Key”和“Value”。
答案 2 :(得分:2)
我认为最好的方法是转换为List&gt;
List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>();
list.AddRange(dictionary);
Grid1.DataSource = list;
这也可以轻松排序:
list.Sort(delegate...);
然后将其作为DataSource传递。
答案 3 :(得分:1)
我不知道字典作为itemsSource有多好。我想根本不会,除非Dictionary实现IEnumerable或ICollection。
但是,您可以创建自己的对象,该对象包含Key字符串属性和您的Object,并具有此类项的集合。然而,这将缺少字典中的许多东西(如唯一的密钥等)。
也许Dictionary有一个ToList()方法
将Dictionary作为源时,是否会出错?如果不是,您可能必须将列上的DisplayMemberPath设置为值和键。
答案 4 :(得分:1)
根据MSDN,DataSource必须是实现以下接口之一的对象:
Dictionary不实现任何这些接口。您可以获得的最接近的是使用List<KeyValuePair<string, myObject>>
。