J'utilise .NET 2.0 et j'essaie de lier la source de données d'une liste déroulante à un dictionnaire trié.
Donc, l'erreur que je reçois est "La propriété DataMember 'Key' est introuvable sur la source de données".
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";
Mais pourquoi définissez-vous ValueMember
sur "Valeur", ne devrait-il pas être lié à "Key" (et DisplayMember
à "Valeur" également)?
J'ai utilisé la solution de Sorin Comanescu, mais j'ai rencontré un problème en essayant d'obtenir la valeur sélectionnée. Ma combobox était une combobox à barres d'outils. J'ai utilisé la propriété "combobox", qui expose une combobox normale.
J'ai eu un
Dictionary<Control, string> controls = new Dictionary<Control, string>();
Code contraignant (la solution de Sorin Comanescu - a fonctionné comme un charme):
controls.Add(pictureBox1, "Image");
controls.Add(dgvText, "Text");
cbFocusedControl.ComboBox.DataSource = new BindingSource(controls, null);
cbFocusedControl.ComboBox.ValueMember = "Key";
cbFocusedControl.ComboBox.DisplayMember = "Value";
Le problème était que lorsque j'ai essayé d'obtenir la valeur sélectionnée, je ne savais pas comment la récupérer. Après plusieurs tentatives, j'ai eu ceci:
var control = ((KeyValuePair<Control, string>) cbFocusedControl.ComboBox.SelectedItem).Key
J'espère que ça aide quelqu'un d'autre!
var colors = new Dictionary < string, string > ();
colors["10"] = "Red";
Liaison à la Combobox
comboBox1.DataSource = new BindingSource(colors, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
Full Source ... Dictionnaire en tant que source de données Combobox
Jeryy
userListComboBox.DataSource = userCache.ToList();
userListComboBox.DisplayMember = "Key";
Un dictionnaire ne peut pas être utilisé directement comme source de données, vous devriez en faire plus.
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";
Essayez juste de faire comme ça ....
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";
}
Utiliser ->
comboBox1.DataSource = colors.ToList();
Sauf si le dictionnaire est converti en liste, la liste déroulante ne peut pas reconnaître ses membres.
Si cela ne fonctionne pas, pourquoi ne pas simplement faire une boucle foreach sur le dictionnaire en ajoutant tous les éléments à la liste déroulante?
foreach(var item in userCache)
{
userListComboBox.Items.Add(new ListItem(item.Key, item.Value));
}