【问题标题】:Bind List<KeyValuePair> to combobox将 List<KeyValuePair> 绑定到组合框
【发布时间】:2015-03-05 09:43:45
【问题描述】:

我无法创建类或我自己的对象,所以我想我会使用List&lt;KeyValuePair&gt; 来存储两个属性,然后将此对象绑定到组合框。

但是,我看不到如何在组合框中设置 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();

有谁知道我需要在???? 中输入什么。

【问题讨论】:

  • ValueField = "Key" TextField = "Value" ?
  • 真的吗?哇...干杯
  • 这取决于你想要达到的目标
  • 所以基本上对于数据源中的每个项目,都有它的键(u.ID)和它的值(u.Name)
  • 如果您希望 cmboBox.SelectedValue 成为 ID,请将其 ValueField 设置为 Key...您还应该考虑制作 Dictionary 而不是 List>

标签: c# winforms combobox keyvaluepair


【解决方案1】:

我觉得应该是这样的:

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

因为您使用的是 KeyValuePair。属性为KeyValue

更新:

我也有一个建议。而不是使用 for 循环。然后您可以使用 Linq 将其绑定到组合框的数据源。像这样的:

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;

【讨论】:

  • 哇,很简单。会给它一个bash。谢谢! (当我允许时会标记)
  • @user3428422:没问题
  • @user3428422 :我也用一个建议更新了答案。看看
  • 是的,这个建议非常好,我喜欢使用 LINQ。我会推荐这种方式。再次感谢
  • @user3428422:没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多