「ほっ」と。キャンペーン
(.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 ですが、実際にコンボボックスを表示すると下記のようになります。
e0091163_1353080.jpg


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

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<型> を直接バインドしたときのみ起こるのかもしれません。
[PR]
by jehoshaphat | 2010-02-28 13:08 | .Net開発 | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/12226899
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


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