Liaison de combobox utilisant un dictionnaire comme source de données

J’utilise .NET 2.0 et j’essaie de lier une source de données de combobox à un dictionnaire sortingé.

Donc, l’erreur que j’obtiens est “La propriété DataMember ‘Key’ est introuvable sur la source de données”.

SortedDictionary userCache = UserCache.getSortedUserValueCache(); userListComboBox.DataSource = new BindingSource(userCache, "Key"); //This line is causing the error userListComboBox.DisplayMember = "Key"; userListComboBox.ValueMember = "Value"; 

 SortedDictionary userCache = new SortedDictionary { {"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 “Value”, ne devrait-il pas être lié à “Key” (et DisplayMember à “Value”)?

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 liste déroulante était une liste déroulante d’outils. J’ai utilisé la propriété “combobox”, qui expose une liste déroulante normale.

J’ai eu un

  Dictionary controls = new Dictionary(); 

Code de liaison (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’essayais d’obtenir la valeur sélectionnée, je n’avais pas compris comment la récupérer. Après plusieurs tentatives, j’ai eu ceci:

  var control = ((KeyValuePair) 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"; 

Source complète … 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 userCache = UserCache.getSortedUserValueCache(); KeyValuePair [] ar= new KeyValuePair[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"; 

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)); } 

Utiliser ->

 comboBox1.DataSource = colors.ToList(); 

À moins que le dictionnaire ne soit converti en liste, la zone de liste déroulante ne peut pas reconnaître ses membres.

Juste essayer de faire comme ça ….

 SortedDictionary userCache = UserCache.getSortedUserValueCache(); // Add this code if(userCache != null) { userListComboBox.DataSource = new BindingSource(userCache, null); // Key => null userListComboBox.DisplayMember = "Key"; userListComboBox.ValueMember = "Value"; }