2009-01-07 8 views
5

J'ai un ComboBox mis en place comme suit, où KVPList est un IList (de KeyValuePair si elle importe):Liaison d'un ComboBox à une IList et en utilisant SelectedValue

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

J'ai mis en place une fixation puis avec SelectedValue , liant à BindingSourceDataSet). Pour une raison quelconque, la zone de liste déroulante est toujours vide lorsque le formulaire est affiché. Il est correctement peuplé, cependant (les valeurs du IList s'affichent correctement et peuvent être sélectionnées).

Maintenant, j'ai fait de mon mieux pour tracer à travers, et il semble initialement définir correctement la valeur SelectedValue quand elle est liée, mais quelque part en cours de route elle est réinitialisée à null. J'ai joué avec l'ordre que les choses s'appellent également, en vain.

Quelqu'un peut-il nous éclairer à ce sujet ou suggérer une solution de contournement? Pour l'enregistrement, sur le même formulaire, j'ai un autre ComboBox sur le même formulaire, avec ses SelectedValue liés au même BindingSource. Le DataSource est un DataSet, pas un IList et il fonctionne comme un charme. Il pourrait être une option pour faire un DataTable du IList, mais il semble que beaucoup de surcharge supplémentaire; Je génère le IList à partir d'une énumération.

Répondre

7

Ouch. Après essentiellement une demi-journée gaspillée sur celui-ci, je l'ai compris. C'était complètement une erreur de ma part.

Le KVPList a été mis à un IList de KeyValuePair<short,string>, mais le champ de données est de type int. Essentiellement, la liaison de données se déclencherait et définirait la propriété SelectedValue. Ensuite, les liaisons DisplayMember et ValueMember se déclenchent, en vérifiant à nouveau le SelectedValue. Puisque le ValueMember est du type short, pas int, il ne trouverait pas de correspondance et le définirait 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 vais laisser cette question au cas où quelqu'un d'autre se heurte au même problème. Il est difficile à traquer parce que je m'attendrais à ce qu'il essaye de lancer ou de lancer une exception, et non de passer silencieusement à zéro. Après tout, short et int sont tous les deux des types de valeur et le dernier vérifié (int)10 == (short)10 est vrai.

+0

Merci pour votre réponse. J'ai rencontré le même problème. Mon type de propriété de dépendance était IList qui était lié à un ILIst . (Foo implémente IFoo). Tout semblait fonctionner, sauf que la valeur de la propriété de dépendance était toujours nulle. Aucune exception ou sortie de débogage. Lorsque j'ai changé le type de propriété de dépendance à IList tout a commencé à fonctionner. –