y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

DropDownListのSelectedValueをバインドする際のエラー回避方法

データバインドを使ってお気楽にDB更新画面なんぞを作っていると
項目一覧に存在しないため、'[ドロップダウンリスト名]' に SelectedValue を指定することは無効です。
なんていう悲しいエラーメッセージに出くわすことがある。
意味は、「ドロップダウンで指定したリスト内に、SelectedValueに該当する値が無いぞ、この野郎」というものだ。「ドロップダウンマスタに存在しない値を、フィールド内に入れるなよ!」という話なのだが、DB内に妙な値が挿入されるケースもあるのでしょうがない。入っている値を信用しないで、コーディング側でエラーを処理しなければいけない。
キモは、AppendDataBoundItems=TrueとListItemコレクションの手動追加、SelectedValueへのメソッド挿入だ

■結論
1:DropDownListアイテムのAppendDataBoundItemsをTrueにする
2:ListItemコレクションを追加する(たとえば、”指定しない|''”のような値
3:SelectedValueにメソッドをかませる。たとえばcheckValue(Eval("[バインドするフィールド名]"))

2までで、ドロップダウンとして取得するリストに空白の値が無くても、空白を許容するようにできた
3から先、許容しない値をメソッドで捕獲して、空白を返すよう細工する

protected string checkValue(object obj)
{
string str = "";
if (obj == null)
{
return "";
}
else
{
//ここから先、つらつらと許容しない値のための処理
str = obj.ToString();
if (str == "-1")
{
return "";
}
else
{
return str;
}
}

}