3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)ComboBoxでDataSourceオブジェクトの中にNullがあると...

ComboBoxの DataSource に List オブジェクトを指定したんですが、その List の中に Null があるとそこっから先が Item として追加されないみたいなんです。

例えば下記のような場合です。(C#)

//ComboBoxNullテスト

List lst = new List();

lst.Add(null);

lst.Add("a");

lst.Add("b");

lst.Add("c");

comboBox1.DataSource = lst;

この場合、最初に追加した値が null ですが、実際にコンボボックスを表示すると下記のようになります。

次に、null を3番目にすると、下記のようになりました。

//ComboBoxNullテスト

List lst = new List();

lst.Add("a");

lst.Add("b");

lst.Add(null);

lst.Add("c");

つまり、null のところまでは要素として入っていますが、それ以降は無視という感じです。

上記は List の例でしたが、バインドするオブジェクトに DictionaryEntry を使ってみました。(DictionaryEntryに関しては(.Net)DictionaryEntryを使ってコンボボックスに表示文字列と処理用の値をセットする参照)

System.Collections.ArrayList ary = new System.Collections.ArrayList();

ary.Add(new System.Collections.DictionaryEntry(null, null));

ary.Add(new System.Collections.DictionaryEntry("a", 1));

ary.Add(new System.Collections.DictionaryEntry("b", 2));

ary.Add(null);

ary.Add(new System.Collections.DictionaryEntry("c", 3));

 

comboBox1.DataSource = ary;

comboBox1.DisplayMember = "Key";

comboBox1.ValueMember = "Value";

これだと5行目の null のところで、ArgumentNullException が発生し「値を Null にすることはできません。」と怒られます。

5行をのけると、最後の所までちゃんと追加されるんですよね。

なので、今回の現象は List<型> を直接バインドしたときのみ起こるのかもしれません。