Связывание Combobox с использованием словаря в качестве источника данных
Я использую .NET 2.0 и пытаюсь привязать источник данных combobox к отсортированному словарю.
таким образом, ошибка, которую я получаю, - это "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";
8 ответов:
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"значение", а)?
я использовал решение Сорина Команеску, но столкнулся с проблемой при попытке получить выбранное значение. Мой комбобокс был комбобокс элемента управления toolstrip. Я использовал свойство "combobox", которое предоставляет обычный combobox.
Я
Dictionary<Control, string> controls = new Dictionary<Control, string>();код привязки (решение Сорина Команеску-сработало как шарм):
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надеюсь, что это поможет кому-то еще!
var colors = new Dictionary < string, string > (); colors["10"] = "Red";привязка к Combobox
comboBox1.DataSource = new BindingSource(colors, null); comboBox1.DisplayMember = "Value"; comboBox1.ValueMember = "Key";Полный Источник...словарь как источник данных Combobox
Jeryy
словарь не может быть напрямую использован в качестве источника данных, вы должны сделать больше.
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";
Если это не работает, почему бы просто не сделать цикл foreach над словарем, добавив все элементы в поле со списком?
foreach(var item in userCache) { userListComboBox.Items.Add(new ListItem(item.Key, item.Value)); }
использовать ->
comboBox1.DataSource = colors.ToList();если словарь не преобразуется в список, поле со списком не может распознать его членов.
просто попробуйте сделать так....
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"; }
Comments