2009年6月5日金曜日

ユーザーコントロールについて

複数のドロップダウンリストがあるユーザコントロールで、親ドロップダウンリスト選択時に子ドロップダウンリストが更新されるユーザコントロールがありました。(ex:県と市町村のドロップダウンがあって、最初は県の一覧のドロップダウンリストのみ選択可能で、県を特定するその県下の市町村がドロップダウンリストにセットされて、市町村ドロップダウンリストが利用可能になるような動きで、県と市町村は親子関係のテーブルでDBに定義されている。)

で、これの親のドロップダウンリストに対するプロパティsetの反映をどうするかで問題になりました。


ASP.NET2.0の動きだと、以下の順番に処理が動きます。

1.aspxページのPage_Load()

2.ascxユーザコントロールのPage_Load()

3.ボタンイベント処理。


DBから読み込み県のドロップダウンリストに県名一覧をセットする処理を、2でにやらせるとなると、非ポストバックのページ読み込み時(aspxのPage_Load())で、県のプロパティセットをしたときには、県のドロップダウンリストがまだできていない状態なので、ドロップダウンのSelectedValueにセットするというのは何かおかしな感じがする。
でも、2.の時点で、県のプロパティの値を見てSelectedValueをセットした場合は、1の処理でプロパティセットをした場合はうまくいくけど、3のボタンイベント処理で、プロパティセットした値は、ドロップダウンリストに反映されなくなる。


で、本当は、1.の前に動くであろう、ユーザコントロール内のドロップダウンリストのInitイベントで、IsPostBackがfalseのときだけ県名のドロップダウンリストに値を詰め込んでおけば、プロパティセット時には、ドロップダウンリストが出来上がっているのでプロパティセット時にドロップダウンリストのSelectedValueに値を詰め込めばよかっただけのような気がします。

つまり、


1.県のドロップダウンリストのInitイベントにてIsPostBackがfalseのときのみ県名一覧をセットする。
2.市のドロップダウンリストのInitイベントでは、選択不可とする。
3.県のプロパティがセットされた場合は、県のドロップダウンリストのSelectedValueをセットし、市のドロップダウンリストは、選択された県の市名一覧をセットする。(県のプロパティに""がセットされた時は、市のドロップダウンリストを空にして選択不可とする。)
4.市のプロパティをセットされた時は、市のドロップダウンリストのSelectedValueをセットする。

でもこの方法はとらなくなりそう。

0 件のコメント: