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";
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?
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!
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
userListComboBox.DataSource = userCache.ToList();
userListComboBox.DisplayMember = "Key";
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";
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";
}
Verwenden Sie ->
comboBox1.DataSource = colors.ToList();
Wenn das Wörterbuch nicht in eine Liste umgewandelt wird, kann das Kombinationsfeld seine Mitglieder nicht erkennen.
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));
}