人気ブログランキング | 話題のタグを見る
(.Net)ComboBoxでDataSourceオブジェクトの中にNullがあると...
ComboBoxの DataSource に List<string> オブジェクトを指定したんですが、その List<string> の中に Null があるとそこっから先が Item として追加されないみたいなんです。

例えば下記のような場合です。(C#)
//ComboBoxNullテスト
List<string> lst = new List<string>();
lst.Add(null);
lst.Add("a");
lst.Add("b");
lst.Add("c");
comboBox1.DataSource = lst;

この場合、最初に追加した値が null ですが、実際にコンボボックスを表示すると下記のようになります。
(.Net)ComboBoxでDataSourceオブジェクトの中にNullがあると..._e0091163_1353080.jpg


次に、null を3番目にすると、下記のようになりました。
//ComboBoxNullテスト
List<string> lst = new List<string>();
lst.Add("a");
lst.Add("b");
lst.Add(null);
lst.Add("c");

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


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

上記は List<string> の例でしたが、バインドするオブジェクトに 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<型> を直接バインドしたときのみ起こるのかもしれません。
by jehoshaphat | 2010-02-28 13:08 | .Net開発


<< (WindowsServer)... (.Net)Stringの仕様... >>