wake-up-neo.net

Binding Combobox Verwenden Sie Dictionary als Datenquelle

Ich verwende .NET 2.0 und versuche, die Datenquelle einer Combobox an ein sortiertes Wörterbuch zu binden.

Der Fehler, den ich bekomme, ist "DataMember-Eigenschaft 'Schlüssel' kann nicht in der Datenquelle gefunden werden".

        SortedDictionary<string, int> userCache = UserCache.getSortedUserValueCache();
        userListComboBox.DataSource = new BindingSource(userCache, "Key"); //This line is causing the error
        userListComboBox.DisplayMember = "Key";
        userListComboBox.ValueMember = "Value";
57
user803952
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";

Aber warum setzen Sie die ValueMember auf "Value", sollte sie nicht an "Key" (und DisplayMember an "Value") gebunden sein?

115
Sorin Comanescu

Ich habe die Lösung von Sorin Comanescu verwendet, aber beim Versuch, den ausgewählten Wert zu ermitteln, ein Problem aufgetreten. Meine Combobox war eine Toolstrip-Combobox. Ich habe die "Combobox" -Eigenschaft verwendet, die eine normale Combobox freigibt.

Ich hatte ein 

 Dictionary<Control, string> controls = new Dictionary<Control, string>();

Bindungscode (Sorin Comanescus Lösung - funktionierte wie ein Zauber):

 controls.Add(pictureBox1, "Image");
 controls.Add(dgvText, "Text");
 cbFocusedControl.ComboBox.DataSource = new BindingSource(controls, null);
 cbFocusedControl.ComboBox.ValueMember = "Key";
 cbFocusedControl.ComboBox.DisplayMember = "Value";

Das Problem war, dass ich beim Abrufen des ausgewählten Werts nicht wusste, wie ich ihn abrufen kann. Nach mehreren Versuchen bekam ich folgendes:

 var control = ((KeyValuePair<Control, string>) cbFocusedControl.ComboBox.SelectedItem).Key

Hoffe es hilft jemand anderem!

19
CristisS
        var colors = new Dictionary < string, string > ();
        colors["10"] = "Red";

Bindung an Combobox

        comboBox1.DataSource = new BindingSource(colors, null);
        comboBox1.DisplayMember = "Value";
        comboBox1.ValueMember = "Key"; 

Full Source ... Wörterbuch als Combobox-Datenquelle

Jeryy

6
jeryymanly
userListComboBox.DataSource = userCache.ToList();
userListComboBox.DisplayMember = "Key";
4
smashrain

Ein Wörterbuch kann nicht direkt als Datenquelle verwendet werden, Sie sollten mehr tun.

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";
2
DeveloperX

Versuchen Sie es einfach so ...

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";
    }
0
i486you

Verwenden Sie -> 

comboBox1.DataSource = colors.ToList();

Wenn das Wörterbuch nicht in eine Liste umgewandelt wird, kann das Kombinationsfeld seine Mitglieder nicht erkennen.

0
Swaraj

Wenn dies nicht funktioniert, führen Sie einfach eine foreach-Schleife über das Wörterbuch aus und fügen Sie alle Elemente in die Combobox ein.

foreach(var item in userCache)
{
    userListComboBox.Items.Add(new ListItem(item.Key, item.Value));
}
0
thekip