我正在使用.NET 2.0,我正在尝试将组合框的数据源绑定到排序字典。
所以我得到的错误是“DataMember属性'Key'在数据源上找不到”。
SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache();
userListComboBox.DataSource = new BindingSource(userCache, "Key"); //This line is causing the error
userListComboBox.DisplayMember = "Key";
userListComboBox.ValueMember = "Value";
答案 0 :(得分:117)
SortedDictionary<string, int> userCache = new SortedDictionary<string, int>
{
{"a", 1},
{"b", 2},
{"c", 3}
};
comboBox1.DataSource = new BindingSource(userCache, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
但为什么要将ValueMember
设置为“值”,是否应该将其绑定到“键”(以及DisplayMember
到“值”?)
答案 1 :(得分:19)
我使用了Sorin Comanescu的解决方案,但在尝试获取所选值时遇到了问题。我的组合框是一个工具条组合框。我使用了“combobox”属性,它暴露了一个普通的组合框。
我有一个
Dictionary<Control, string> controls = new Dictionary<Control, string>();
绑定代码(Sorin Comanescu的解决方案 - 像魅力一样工作):
controls.Add(pictureBox1, "Image");
controls.Add(dgvText, "Text");
cbFocusedControl.ComboBox.DataSource = new BindingSource(controls, null);
cbFocusedControl.ComboBox.ValueMember = "Key";
cbFocusedControl.ComboBox.DisplayMember = "Value";
问题在于,当我试图获取所选值时,我没有意识到如何检索它。经过多次尝试,我得到了这个:
var control = ((KeyValuePair<Control, string>) cbFocusedControl.ComboBox.SelectedItem).Key
希望它可以帮助别人!
答案 2 :(得分:6)
var colors = new Dictionary < string, string > ();
colors["10"] = "Red";
绑定到Combobox
comboBox1.DataSource = new BindingSource(colors, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
完整来源...... Dictionary as a Combobox Datasource
Jeryy
答案 3 :(得分:4)
userListComboBox.DataSource = userCache.ToList();
userListComboBox.DisplayMember = "Key";
答案 4 :(得分:2)
字典不能直接用作数据源,您应该做更多。
SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache();
KeyValuePair<string, int> [] ar= new KeyValuePair<string,int>[userCache.Count];
userCache.CopyTo(ar, 0);
comboBox1.DataSource = ar; new BindingSource(ar, "Key"); //This line is causing the error
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
答案 5 :(得分:0)
如果这不起作用,为什么不简单地在字典上做一个foreach循环,将所有项目添加到组合框中?
foreach(var item in userCache)
{
userListComboBox.Items.Add(new ListItem(item.Key, item.Value));
}
答案 6 :(得分:0)
使用 - &gt;
comboBox1.DataSource = colors.ToList();
除非字典转换为列表,否则组合框无法识别其成员。
答案 7 :(得分:0)
试着这样做....
SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache();
// Add this code
if(userCache != null)
{
userListComboBox.DataSource = new BindingSource(userCache, null); // Key => null
userListComboBox.DisplayMember = "Key";
userListComboBox.ValueMember = "Value";
}
答案 8 :(得分:0)
我知道这是一个很老的话题,但是我也遇到了同样的问题。
我的解决方案:
我们如何填充组合框:
foreach (KeyValuePair<int, string> item in listRegion)
{
combo.Items.Add(item.Value);
combo.ValueMember = item.Value.ToString();
combo.DisplayMember = item.Key.ToString();
combo.SelectedIndex = 0;
}
这就是我们进入内部的方式:
MessageBox.Show(combo_region.DisplayMember.ToString());
我希望它可以帮助某人