C# 如何将字典绑定到gridview?

C# 如何将字典绑定到gridview?,c#,asp.net,data-binding,gridview,dictionary,C#,Asp.net,Data Binding,Gridview,Dictionary,是否可以将字典自动绑定到Gridview?我得到的最接近的结果是: Dictionary<string, myObject> MyDictionary = new Dictionary<string, myObject>(); // Populate MyDictionary here. Grid1.DataSource = MyDictionary.Values; Grid1.DataBind(); Dictionary MyDictionary=newdiction

是否可以将字典自动绑定到Gridview?我得到的最接近的结果是:

Dictionary<string, myObject> MyDictionary = new Dictionary<string, myObject>();
// Populate MyDictionary here.
Grid1.DataSource = MyDictionary.Values;
Grid1.DataBind();
Dictionary MyDictionary=newdictionary();
//在这里填充MyDictionary。
Grid1.DataSource=MyDictionary.Values;
Grid1.DataBind();

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

我相信您需要将列绑定到“键”和“值”上。

您可以使用:

var data = MyDictionary.Select(x => new List<object>{x.Key, x.Value});
var data=MyDictionary.Select(x=>newlist{x.Key,x.Value});
这将为您提供一个
IEnumerable
,其中
IEnumerable
表示“行”,每行中的
列表
表示“列”


如果
myObject
是一种集合类型,则情况略有不同。我无法从您的代码中确定,但看起来情况并非如此。

我不知道dictionary作为一个itemsSource的效果如何。除非字典实现IEnumerable或ICollection,否则我想根本不会

但是,您可以创建自己的对象,该对象包含一个键字符串属性和您的对象,并具有此类项的集合。然而,这将缺少字典拥有的许多东西(比如唯一键等等)

也许字典有一个ToList()方法

将字典作为源时是否会给您带来错误。如果没有,可能您必须将列上的DisplayMemberPath设置为Value和Key。

根据,数据源必须是实现以下接口之一的对象:

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

字典不实现这些接口中的任何一个。最接近的方法是使用
List

我认为最好的方法是转换成列表>

List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>();
list.AddRange(dictionary);
Grid1.DataSource = list;

然后将其作为数据源传递。

事实上,字典确实实现了
IEnumerable
ICollection。我不明白为什么它不能像任何其他集合一样用作ListView的itemsSource。GetEnumerator()也会这样做吗?@Ing枚举将是
KeyValuePair
类型的对象。谢谢,不幸的是,我们仍然使用.NET2.0,所以我认为这在我的情况下不起作用。myObject不是集合类型。你是说DataGridView(我不熟悉)而不是ListView的GridView吗?如果是这样,我想我的答案不适用。目前我只是将两个asp.net GridView并排放置,一个绑定到MyDictionary.Keys,另一个绑定到MyDictionary.Values。这是针对WinForms DataGridView控件的,而不是针对asp.net GridView控件的。
list.Sort(delegate...);