- - PR -
別ページのGridViewへのBindに関して
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-05 10:06
べる様
今まで数々のご教授ありがとうございます。 おかげさまで方向性、するべきことがはっきりしました。 本当にありがとうございました。 | ||||||||||||
|
投稿日時: 2007-03-14 16:16
お世話になっております。
再度質問させていただきます。 おかげさまで、現在左ページにDB、Tableのドロップダウンリスト及び表示用ボタン、 右ページにGridViewとなっており、ボタン押しでセレクトされているDB、Tableの データが右ページで表示されている段階です。 表示後、再び上記の一連の作業を繰り返せるように したいと思っております。 そこで右ページのPage_LoadイベントでGridViewに表示後、 target="left" として左に戻しているつもりでいるのですが うまく機能しません。その要因としては 1.初期では可能であった、DBのドロップダウンリストの変更で Tableのドロップダウンリストの内容が更新されない(アイテムのクリアもされない) 2.DBのSelectIndexChangedイベント終了後すぐにTableのSelectIndexChanged イベントが走ってしまう ということが挙げられます。 2に関しては誤魔化しがきくのですが、1はしっかりメソッドも走っていて なぜ更新できないのか検討がつきません。 ご指導よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2007-03-14 17:25
そのページがサーバからレスポンスとして返されたときに選択されていた値、と比較して、 クライアントからポストバックされたときに選択されていた値、が変わっていたらです。 ちなみに、よく関連付けて考える人がいる気がしますが、このイベントとAutoPostBackは根本的には関係ありません。 | ||||||||||||
|
投稿日時: 2007-03-14 17:58
べる様
いつもお世話になっております。 再びお手数をおかけして申し訳ありません。
右ページのPage_Loadイベントにおいて、Page.PreviousPageで 左ページのインスタンスを取得し、イベントの最後でこのインスタンスに対して インスタンス名.Form.Target = "left"; としております。間違っていますでしょうか。 またtarget = "right" に関しては教えていただいたクライアントの onchangeイベントで行っておりますが、leftへはサーバ側で処理しております。 ここに問題がありますでしょうか。
実際にページにて表示されているリスト内は変更できていないため (本当は変更してほしいのですが)、SelectIndexChangedが走らない のでは、、と思っているのですが。 処理としましては tables.Items.Clear(); tables.Items.Add(""); while (reader.Read()) { tables.Items.Add(reader.GetString(0)); } というようなかんじでDBセレクト時に走らせており、 実際リストのカウント数などは変わっております。 内部的には変更できているが、表示が・・・という風に思えます。 べる様のおっしゃるとおり、少しPostBackと混同してしまっているかもしれません。 またサーバ、クライアントそれぞれの処理の違いにも苦労しております。(汗 長々とすみませんがご指導いただけたらと思います。 よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2007-03-15 01:03
まず
サーバーコードでは、そのとき返すレスポンスにまつわるものしか操作できません。 (まぁセッションなどの、サーバーにある資源は操作できるけど) 送出されたHTMLソースを見てみてください。左フレームのtargetを変更したという 形跡があるでしょうか?クライアントは返されたレスポンスに基づいてしか動作しません。
1、クライアントがリクエストする(ブラウザにURL打ってポンとか、リンク押すとか、ボタンおすとか) 2、サーバがレスポンスを返す(C#とかVB.NETとかはこのときしか動いてない) 3、帰ってきたレスポンス(HTMLとか書いてある)を元にクライアントが表示とかする サーバは2の一瞬しか動いてません。最初にページを表示したときに1〜3が起き、 ページ内のボタンを押したときにも1〜3が起き、、というようになってるだけです。(わかりにくw) | ||||||||||||
|
投稿日時: 2007-03-15 11:12
べる様
ご指導ありがとうございます。
プログラムの流れにそってtargetの値を調べてみたところ 私の確認できた範囲では常にtarget=""となっておりました。 function dataTable_onchange() { //datatable変更時にpostback先を右ページへ変更 form1.target = "right"; } とクライアントで処理しているのですが、rightに変わっている状態は サーバ処理上ではわからないのでしょうか。 これに関連して1つお聞きしたいのですが、クライアントが走っている状態を ブレークポイントみたいなもので止めて見ることはやっぱり不可能でしょうか。 一旦GridViewに表示してからは、DBのドロップダウンリスト変更で右ページの Page_Loadイベントが走ってしまっています。この辺に原因がありそうなのですが、、 全く解決策が浮かばず頭が茹ってきておりますが(笑)、 ご指導よろしくお願いいたします。 [ メッセージ編集済み 編集者: NotFound 編集日時 2007-03-15 11:47 ] | ||||||||||||
|
投稿日時: 2007-03-15 13:31
1にあたるとしてもリアルタイムにはわからないし、2でわかるためにはその情報が サーバに渡される必要がありますよね。
あればできるんでしょうけど。
・データベース選択ドロップダウン変更時にtargetを左にする処理を加える(結局onchange) ではだめですか?これはクライアントコードでの操作になります。 targetをrightに変更することには成功しているのです。それと同様の操作で、 しかるべきタイミングでleftにしてやればいい、という考え方です。 | ||||||||||||
|
投稿日時: 2007-03-15 18:01
べる様
いつもご指導ありがとうございます。
べる様のご指摘どおり、クライアントでのtarget変更がベストを考え、 またSelectIndexChanfedとまず分けることで解りやすくしようと考えまして onchangeではなく2つのボタンを左ページに用意し、そこにonclickでtargetを左と 右にするものを用意してみました。 まず、target="right"ボタン押し後のGridView表示は問題なく終えました。 その後、target="left"ボタン押し後にDBのドロップダウンを変更しましたが、 やはりTableのドロップダウンリストは更新できませんでした。 そしてこのようにしていてもGridView表示後のSelectIndexChangedイベントで 右ページのPage_Loadが走ってしまいます。。。 度々申し訳ありませんが、ご指導よろしくお願いいたします。 |