- PR -

ASP.NET2.0 PageLoadイベントでDropDownListの初期値を設定

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-08-31 12:51
ASP.NET2.0です。

初歩的なことなのかもしれませんがよろしくお願いいたします。

ページにDropDownListとLabelを配置します。
DropDownListのデータソースにはObjectDataSourceを使用しています。
Page_Loadイベントで下記のコードを記述しました。
-------コード------------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.DropDownList1.SelectedValue = "5"
Me.Label1.Text = Me.DropDownList1.SelectedValue.ToString
End Sub
-------------------------------------------
PostBack時にはLabel1にはDropDownListの選択値が表示されるのですが、初回起動時には表示されません。

実際の運用では
検索用DropDownList(複数)、検索Button、表示用GridView、ObjectDataSource(GridViewのデータソース用)があり、ObjectDataSourceのSelectパラメータにDropDownListを指定しております。
特定のユーザーがページを開いた際は検索用DropDownListに初期値を設定し、ObjectDataSourceがDropDownListの値を使用しフィルタしたデータを取得すると考えていたのですが、初回起動時のみObjectDataSourceが全データを取得してしまいます。
ObjectDataSourceのSelectParameterを見てみるとDropDowListの値は""になっておりました。PostBack時は正常に動作します。

ObjectDataSourceのSelectingイベントでDropDownListのSelectedValue値を見ると、やはり初回起動時は""になっていました。

回避策などございましたら、教えていただけないでしょうか。
よろしくお願いいたします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-08-31 13:33
> DropDownListのデータソースにはObjectDataSourceを使用しています。

このDropDownListにはデータバインドによってItemが追加されるんですよね?
デフォルトではデータバインドはページのレンダリングが行われる直前に発生します。
Page_Loadのタイミングではデータはまだバインドされていませんので、うまく
動かないということになります。

DropDownListのPreRenderイベントで、初回起動時であること(IsPostBackが
trueでない)を確認してSelectedValueの値を設定してあげればよいかと思います。
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-08-31 14:17
どっとねっとふぁんさん
返信ありがとうございます。

以下のコードを
→Pre_Renderイベントに修正しました。
-------コード------------------------------
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
Me.DropDownList1.SelectedValue = "5"
Me.Label1.Text = Me.DropDownList1.SelectedValue.ToString
End Sub
-------------------------------------------

やはりPostBack時にはLabel1にはDropDownListの選択値が表示されるのですが、初回起動時には表示されません。

実際の運用コードでも試してみましたが、現象は変わりません。

よろしくお願いいたします。

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-08-31 14:32
前に書いてますように、「DropDownListのPreRender」イベントに処理を
追加してください。
データバインドはPage_PreRenderより後に発生します。

#Pageのイベントを利用するならPreRenderCompleteを使ってください。

また、初回起動時かどうかの判定をいれないと、常に選択値は5に
なってしまいます。

1

スキルアップ/キャリアアップ(JOB@IT)