5

私は次のComboBoxように設定しています。KVPListIListKeyValuePair

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

次に、とのバインディングを設定し、 (へ)SelectedValueにバインディングしました。何らかの理由で、フォームが表示されると、コンボ ボックスは常に空白になります。ただし、適切に入力されています ( の値は正常に表示され、選択できます)。BindingSourceDataSetIList

今、私はトレースするために最善を尽くしましたが、最初はバインド時に SelectedValue を正しく設定しているように見えますが、途中で にリセットされnullます。私も同様に呼び出される順序で遊んでみましたが、役に立ちませんでした。

誰かがこれに光を当てたり、回避策を提案したりできますか?

記録のために、同じフォームに、同じフォームに別ComboBoxのフォームがあり、同じにSelectedValueバインドされていBindingSourceます。はではなく でDataSourceあり、魅力のように機能します。からを作成するオプションかもしれませんが、余分なオーバーヘッドがかなりかかるようです。列挙から を生成しています。DataSetIListDataTableIListIList

4

1 に答える 1

7

ああ。基本的にこれで半日無駄にした後、私はそれを理解しました. 完全に私のミスでした。

はofKVPListに設定されましたが、データ フィールドのタイプはです。基本的に、データバインディングが起動し、プロパティが設定されます。次に、およびバインディングが起動し、 が再びチェックされます。は型ではなく であるため、一致するものが見つからず、null に設定されます。IListKeyValuePair<short,string>intSelectedValueDisplayMemberValueMemberSelectedValueValueMembershortint

ボックス化とボックス化解除で何かおかしなことが起こっているに違いないが、今は疲れすぎてその理由が理解できない.

他の誰かが同じ問題に遭遇した場合に備えて、この質問はそのままにしておきます。サイレントに null になるのではなく、キャストまたは例外のスローを試みると予想されるため、追跡するのは困難です。結局のところ、shortintはどちらも値型であり、最後にチェック(int)10 == (short)10したのは true です。

于 2009-01-07T17:11:52.620 に答える