将List<KeyValuePair>绑定到下拉框中

4

我无法创建一个类或自己的对象,因此我想使用 List<KeyValuePair> 来存储两个属性,然后将此对象绑定到组合框。

但是,我不知道如何设置组合框中的 valueFieldTextField

代码如下。

List<KeyValuePair<int, string>> kvpObject = 
 new List<KeyValuePair<int, string>>();

foreach (User u in m_users) {

    kvpObject.Add(new KeyValuePair<int, string>(u.ID, u.Name));
}

// Bind Add Users combobox
cmboBox.DataSource = kvpObject;
cmboBox.ValueField = "????" // Maybe something like kvpObject[0]..
cmboBox.TextField  = "????";
cmboBox.DataBind();

有人知道我需要在????里面放什么吗?


2
ValueField = "Key" TextField = "Value" 的意思是什么? - Florian Schmidinger
真的吗?哇...干杯 - user3428422
不过这取决于你想要实现什么。 - Florian Schmidinger
基本上,对于数据源中的每个项目,都有它的键(u.ID)和它的值(u.Name)。 - user3428422
如果您希望 cmboBox.SelectedValue 是 ID,请将其 ValueField 设置为 Key... 您还应该考虑制作一个 Dictionary<int,string>,而不是 List<KeyValuePair<int,string>>。 - Florian Schmidinger
1个回答

14

我认为应该是这样的:

cmboBox.ValueField = "Key";
cmboBox.TextField  = "Value";

因为你正在使用KeyValuePair。它的属性是KeyValue

更新:

我还有一个建议。不要使用for循环,你可以使用Linq将其绑定到combobox的数据源。类似于这样:

cmboBox.DataSource = m_users
                      .Select (s =>new KeyValuePair<int,string>(s.ID,s.Name))
                      .ToList();
cmboBox.ValueField = "Key";
cmboBox.TextField  = "Value";
cmboBox.DataBind();

记得包含System.Linq;


哇,非常简单。我会试一下的。谢谢!(等 SO 允许我时会标记的) - user3428422
@user3428422:没问题。 - Arion
@user3428422: 我也附上了一个建议,请查看。 - Arion
是的,这个建议非常好,我喜欢使用LINQ。我会推荐这种方式。再次感谢。 - user3428422
@user3428422:没问题。 - Arion
我该如何在foreach中使用它? - Gabriel Gomes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接