如何将字典绑定到gridview?

时间:2011-01-07 15:31:01

标签: c# asp.net data-binding gridview dictionary

是否可以自动将Dictionary绑定到Gridview?我最接近的是:

Dictionary<string, myObject> MyDictionary = new Dictionary<string, myObject>();
// Populate MyDictionary here.
Grid1.DataSource = MyDictionary.Values;
Grid1.DataBind();

这会将myObject中的属性绑定到gridview,但我也想获取密钥。如果不可能,是否有替代方案,例如使用中继器?感谢。

5 个答案:

答案 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必须是实现以下接口之一的对象:

  • IList接口,包括一维数组。
  • IListSource接口,例如DataTable和DataSet类。
  • IBindingList接口,例如BindingList类。
  • IBindingListView接口,例如BindingSource类。

Dictionary不实现任何这些接口。您可以获得的最接近的是使用List<KeyValuePair<string, myObject>>