Question

J'ai une ComboBox configurée comme suit, où KVPList est un IList (of KeyValuePair s'il questions):

comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;

J'ai ensuite établi une liaison avec SelectedValue , liant un BindingSource (à un DataSet ). Pour une raison quelconque, la liste déroulante est toujours vide lorsque le formulaire est affiché. Cependant, il est correctement rempli (les valeurs de IList s’affichent bien et peuvent être sélectionnées).

Maintenant, j'ai fait de mon mieux pour effectuer le suivi, et il semble que, initialement, la SelectedValue soit correctement définie correctement, mais qu'elle soit réinitialisée quelque part en cours sur null . J'ai joué avec l'ordre, les choses sont également appelées, mais en vain.

Quelqu'un peut-il nous éclairer ou suggérer une solution de contournement?

Pour mémoire, sur le même formulaire, j'ai un autre ComboBox sur le même formulaire, avec son SelectedValue lié ??au même BindingSource . Le DataSource est un DataSet , et non un IList et fonctionne comme un charme. Ce pourrait être une option pour créer un DataTable à partir de IList , mais cela semble être une charge supplémentaire considérable; Je génère le IList à partir d'une énumération.

Était-ce utile?

La solution

Aïe. Après avoir pratiquement perdu une demi-journée avec celui-ci, je l'ai compris. C'était complètement une erreur de ma part.

La KVPList a été définie sur une IList de KeyValuePair < abrégé < code>, chaîne > , mais le champ de données est de type int . Pour l’essentiel, la liaison de données se déclenche et définit la propriété SelectedValue . Ensuite, les liaisons DisplayMember et ValueMember se déclenchent, en vérifiant à nouveau le SelectedValue . Étant donné que ValueMember est de type short et non pas int , il ne trouve pas de correspondance et le définit donc sur null.

Quelque chose de drôle doit se passer avec la boxe et le déballage, mais je suis trop fatigué pour comprendre pourquoi maintenant.

Je laisserai cette question de côté si quelqu'un d'autre se heurte au même problème. Il est difficile à repérer, car je pense que le système essaiera de lancer une exception ou de lancer une exception, mais pas automatiquement. Après tout, short et int sont tous les deux des types valeur et la dernière fois que j'ai vérifié (int) 10 == (bref) 10 est vrai.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top