Связывание 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";
942   8  

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

userListComboBox.DataSource = userCache.ToList();
userListComboBox.DisplayMember = "Key";

словарь не может быть напрямую использован в качестве источника данных, вы должны сделать больше.

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

    Ничего не найдено.