- PR -

別ページのGridViewへのBindに関して

投稿者投稿内容
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-05 10:06
べる様

今まで数々のご教授ありがとうございます。
おかげさまで方向性、するべきことがはっきりしました。
本当にありがとうございました。

NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 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はしっかりメソッドも走っていて
なぜ更新できないのか検討がつきません。

ご指導よろしくお願いいたします。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-14 17:25
引用:
そこで右ページのPage_LoadイベントでGridViewに表示後、
target="left" として左に戻しているつもりでいるのですが
うまく機能しません。その要因としては

1.初期では可能であった、DBのドロップダウンリストの変更で
Tableのドロップダウンリストの内容が更新されない(アイテムのクリアもされない)

ちゃんと左フレームにあるformのtargetを戻していますか?

引用:
2.DBのSelectIndexChangedイベント終了後すぐにTableのSelectIndexChanged
イベントが走ってしまう

両方変わっていれば両方発生します。変わっていればというのは、
そのページがサーバからレスポンスとして返されたときに選択されていた値、と比較して、
クライアントからポストバックされたときに選択されていた値、が変わっていたらです。

ちなみに、よく関連付けて考える人がいる気がしますが、このイベントとAutoPostBackは根本的には関係ありません。
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-14 17:58
べる様
いつもお世話になっております。
再びお手数をおかけして申し訳ありません。

引用:

ちゃんと左フレームにあるformのtargetを戻していますか?



右ページのPage_Loadイベントにおいて、Page.PreviousPageで
左ページのインスタンスを取得し、イベントの最後でこのインスタンスに対して

インスタンス名.Form.Target = "left";

としております。間違っていますでしょうか。
またtarget = "right" に関しては教えていただいたクライアントの
onchangeイベントで行っておりますが、leftへはサーバ側で処理しております。
ここに問題がありますでしょうか。

引用:

ちなみに、よく関連付けて考える人がいる気がしますが、このイベントとAutoPostBackは根本的には関係ありません。



実際にページにて表示されているリスト内は変更できていないため
(本当は変更してほしいのですが)、SelectIndexChangedが走らない
のでは、、と思っているのですが。
処理としましては

tables.Items.Clear();
tables.Items.Add("");


while (reader.Read())
{
tables.Items.Add(reader.GetString(0));
}

というようなかんじでDBセレクト時に走らせており、
実際リストのカウント数などは変わっております。
内部的には変更できているが、表示が・・・という風に思えます。


べる様のおっしゃるとおり、少しPostBackと混同してしまっているかもしれません。
またサーバ、クライアントそれぞれの処理の違いにも苦労しております。(汗
長々とすみませんがご指導いただけたらと思います。
よろしくお願いいたします。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-15 01:03
まず
引用:
右ページのPage_Loadイベントにおいて、Page.PreviousPageで
左ページのインスタンスを取得し、イベントの最後でこのインスタンスに対して

インスタンス名.Form.Target = "left";

としております。間違っていますでしょうか。

PreviousPageには前のページの情報が入っているだけです。
サーバーコードでは、そのとき返すレスポンスにまつわるものしか操作できません。
(まぁセッションなどの、サーバーにある資源は操作できるけど)

送出されたHTMLソースを見てみてください。左フレームのtargetを変更したという
形跡があるでしょうか?クライアントは返されたレスポンスに基づいてしか動作しません。

引用:
またサーバ、クライアントそれぞれの処理の違いにも苦労しております。(汗

(これをずばり解説してる記事が見つからなかったけど、、)処理というか役割そのものが違います。
1、クライアントがリクエストする(ブラウザにURL打ってポンとか、リンク押すとか、ボタンおすとか)
2、サーバがレスポンスを返す(C#とかVB.NETとかはこのときしか動いてない)
3、帰ってきたレスポンス(HTMLとか書いてある)を元にクライアントが表示とかする

サーバは2の一瞬しか動いてません。最初にページを表示したときに1〜3が起き、
ページ内のボタンを押したときにも1〜3が起き、、というようになってるだけです。(わかりにくw)
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-15 11:12
べる様
ご指導ありがとうございます。

引用:

送出されたHTMLソースを見てみてください。左フレームのtargetを変更したという
形跡があるでしょうか?クライアントは返されたレスポンスに基づいてしか動作しません。



プログラムの流れにそってtargetの値を調べてみたところ
私の確認できた範囲では常にtarget=""となっておりました。

function dataTable_onchange() {

//datatable変更時にpostback先を右ページへ変更
form1.target = "right";

}

とクライアントで処理しているのですが、rightに変わっている状態は
サーバ処理上ではわからないのでしょうか。
これに関連して1つお聞きしたいのですが、クライアントが走っている状態を
ブレークポイントみたいなもので止めて見ることはやっぱり不可能でしょうか。

一旦GridViewに表示してからは、DBのドロップダウンリスト変更で右ページの
Page_Loadイベントが走ってしまっています。この辺に原因がありそうなのですが、、

全く解決策が浮かばず頭が茹ってきておりますが(笑)、
ご指導よろしくお願いいたします。


[ メッセージ編集済み 編集者: NotFound 編集日時 2007-03-15 11:47 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-15 13:31
引用:
function dataTable_onchange() {

//datatable変更時にpostback先を右ページへ変更
form1.target = "right";

}

とクライアントで処理しているのですが、rightに変わっている状態は
サーバ処理上ではわからないのでしょうか。

わからないです。先に私が書いた1,2,3の、1または3にあたりますから。
1にあたるとしてもリアルタイムにはわからないし、2でわかるためにはその情報が
サーバに渡される必要がありますよね。

引用:
これに関連して1つお聞きしたいのですが、クライアントが走っている状態を
ブレークポイントみたいなもので止めて見ることはやっぱり不可能でしょうか。

少なくともC#などと同じように、は不可能です。ブラウザ上で動くデバッガみたいのが
あればできるんでしょうけど。

引用:
一旦GridViewに表示してからは、DBのドロップダウンリスト変更で右ページの
Page_Loadイベントが走ってしまっています。この辺に原因がありそうなのですが、、

全く解決策が浮かばず頭が茹ってきておりますが(笑)、
ご指導よろしくお願いいたします。

私が先に書いた
・データベース選択ドロップダウン変更時にtargetを左にする処理を加える(結局onchange)
ではだめですか?これはクライアントコードでの操作になります。
targetをrightに変更することには成功しているのです。それと同様の操作で、
しかるべきタイミングでleftにしてやればいい、という考え方です。
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-15 18:01
べる様
いつもご指導ありがとうございます。

引用:

私が先に書いた
・データベース選択ドロップダウン変更時にtargetを左にする処理を加える(結局onchange)
ではだめですか?これはクライアントコードでの操作になります。
targetをrightに変更することには成功しているのです。それと同様の操作で、
しかるべきタイミングでleftにしてやればいい、という考え方です。



べる様のご指摘どおり、クライアントでのtarget変更がベストを考え、
またSelectIndexChanfedとまず分けることで解りやすくしようと考えまして
onchangeではなく2つのボタンを左ページに用意し、そこにonclickでtargetを左と
右にするものを用意してみました。

まず、target="right"ボタン押し後のGridView表示は問題なく終えました。
その後、target="left"ボタン押し後にDBのドロップダウンを変更しましたが、
やはりTableのドロップダウンリストは更新できませんでした。
そしてこのようにしていてもGridView表示後のSelectIndexChangedイベントで
右ページのPage_Loadが走ってしまいます。。。

度々申し訳ありませんが、ご指導よろしくお願いいたします。

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