69 votes

La liaison de zone de liste déroulante à l'Aide du Dictionnaire comme source de données

Je suis en utilisant .NET 2.0 et je suis en train de lier une zone de liste déroulante de la source de données à une triés dictionnaire.

Donc l'erreur que j'obtiens est "propriété DataMember 'Clé' ne peut pas être trouvé 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";

148voto

Sorin Comanescu Points 2087
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 vous mettez-vous à l' ValueMember "Valeur", ne devrait-il pas être lié à "la Clé" (et DisplayMember "Valeur")?

24voto

CristisS Points 460

J'ai utilisé Sorin Comanescu de la solution, mais a frappé un problème lorsque vous essayez d'obtenir la valeur sélectionnée. Mon combobox était un toolstrip zone de liste déroulante. J'ai utilisé la "zone de liste déroulante de la propriété", qui expose à la normale zone de liste déroulante.

J'ai eu un

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

Code de liaison (Sorin Comanescu la solution 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 est que quand j'ai essayé d'obtenir la valeur sélectionnée, je ne savais pas comment faire pour le récupérer. Après plusieurs tentatives j'ai obtenu ceci:

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

Espérons que cela aide quelqu'un d'autre!

6voto

jeryymanly Points 1
        var colors = new Dictionary < string, string > ();
        colors["10"] = "Red";

La liaison de zone de liste déroulante

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

Source complet...Dictionnaire comme une zone de liste déroulante source de données

Jeryy

5voto

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

2voto

DeveloperX Points 3609

Un dictionnaire ne peut pas être directement utilisé comme une source de données, vous devez 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";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X