- - PR -
ASP.NET2.0 PageLoadイベントでDropDownListの初期値を設定
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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値を見ると、やはり初回起動時は""になっていました。 回避策などございましたら、教えていただけないでしょうか。 よろしくお願いいたします。 |
|
投稿日時: 2007-08-31 13:33
> DropDownListのデータソースにはObjectDataSourceを使用しています。
このDropDownListにはデータバインドによってItemが追加されるんですよね? デフォルトではデータバインドはページのレンダリングが行われる直前に発生します。 Page_Loadのタイミングではデータはまだバインドされていませんので、うまく 動かないということになります。 DropDownListのPreRenderイベントで、初回起動時であること(IsPostBackが trueでない)を確認してSelectedValueの値を設定してあげればよいかと思います。 |
|
投稿日時: 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の選択値が表示されるのですが、初回起動時には表示されません。 実際の運用コードでも試してみましたが、現象は変わりません。 よろしくお願いいたします。 |
|
投稿日時: 2007-08-31 14:32
前に書いてますように、「DropDownListのPreRender」イベントに処理を
追加してください。 データバインドはPage_PreRenderより後に発生します。 #Pageのイベントを利用するならPreRenderCompleteを使ってください。 また、初回起動時かどうかの判定をいれないと、常に選択値は5に なってしまいます。 |
1