- 題名: 部分PostBack時のDataBind
- 日時: 2010/08/17 16:06:29
- ID: 27190
- この記事の返信元:
- (なし)
- この記事への返信:
- [27192] Re[1]: 部分PostBack時のDataBind2010/08/18 8:55:59
- ツリーを表示
■No27190に返信(麦茶さんの記事) > 1.Aで再度検索処理(Bind)をしたくないのですが、可能でしょうか おそらくは可能だと思います。 コードで明示的に Bind を呼んでいるのであれば呼ばないようにして、 暗黙的に Bind が呼ばれるようであれば Bind を呼ぶ条件というのがあるはずなので その条件を不成立にするとよいのかなと思います。 DataBind と言いますか検索処理はどのように実装されているのでしょうか。 DataSource コントロールを利用されていたりしますか? > 2.クライアント側に表示されている値を優先したいのですが、可能でしょうか 1が可能であればできるように思います。
■No27194に返信(麦茶さんの記事) > 部分PostBack時は、.DataBind()は流れておりません。 > Aで部分PostBackした際に再度検索処理(Bind)が流れている ということに鑑みると部分ページレンダリング時に明示的に DataBind は呼ばないけれども 暗黙的に DataBind されるということですか。 > Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click > If Page.IsValid Then > GridView1.DataSourceID = ObjectDataSource1.ID > GridView1.DataBind() > End If > End Sub 検索時のコードにおいて TextBox の値を参照していないようですが ObjectDataSource で ControlParameter などを利用していらっしゃるのでしょうか?
2010/08/18(Wed) 14:32:40 編集(投稿者) ■No27197に返信(麦茶さんの記事) > <asp:ControlParameter ControlID="TextBox1" Name="項目名" > PropertyName="Text" Type="String" ConvertEmptyStringToNull="false" /> ControlParameter が自身のバインド先である TextBox1.Text の値が変わったことを 検出して自動的に ObjectDataSource の DataBind を呼び出すのではないかと思います。 対応としては部分ページレンダリング時に TextBox1.Text の値の変化を検出しないようにする とよいわけなので ControlParameter を Parameter に置き換えて <asp:Parameter Name="項目名" Type="String" /> btnSearch.Click 時に Parameter に値をセットするというやり方が考えられます。 Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click If Page.IsValid Then Dim parameter As Parameter = ObjectDataSource1.SelectParameters(0) parameter.DefaultValue = TextBox1.Text End If End Sub 丁寧に実装するならば以下のリンク先のような感じで Parameter の派生クラスを作成したほう がよいのかなと思います。 Parameter クラス http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.parameter.aspx
分類:[ASP.NET]
お世話になります。
ASP.NET 3.5
VisualStudio2008
にて開発しております。
-------------------------------
|【検索条件】 |
| |
| コードTextBox 名称Label |
| 検索ボタン |
| |
| --------------------------- |
| | 一覧表(GridView) | |
| |ハイパーリンク | |
| | | |
| | | |
| --------------------------- |
| |
--------------------------------
上のような一覧検索画面を作成しました。
主な機能としては、
検索ボタンクリックで、TextBoxの検索条件で検索し、結果をGridViewで表示。
一覧表内の任意の行を選択で、明細画面へ遷移。
また、コードTextBoxに値が入力されると、DB検索を行い、名称Labelを設定します。
ここのみ、UpdatePanelを利用し、部分PostBackで実装しています。
だいたい正常に動いているのですが、以下手順で不具合が発生しております。
@コードTextBoxに「A」と入力し、検索ボタンクリック
AコードTextBoxに「B」と入力し、検索ボタンは押さない
B一覧表の「A」をクリックすると、一覧表に表示されていない「B」の明細画面へ遷移する。
デバッグしてみたところ
Aで部分PostBackした際に再度検索処理(Bind)が流れているのですが、GridViewはUpdatePanelに入れていないため、書き換わっていません。(書き換えたくありません)
その為、クライアント側で表示されているGridViewとサーバー側のGridViewが異なっているようです。
お聞きしたいこととしては
1.Aで再度検索処理(Bind)をしたくないのですが、可能でしょうか
2.クライアント側に表示されている値を優先したいのですが、可能でしょうか
UpdateModeはConditionalです。
GridViewの選択行はSelectedDataKeyで拾っています。
お手数をお掛けしますが何卒よろしくお願いいたします