- PR -

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

投稿者投稿内容
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-02-28 18:01
VS2005、言語はC#でASP.NET 2.0で開発しております。
ASPに関しては最近触れだした程度です。

frameを利用した2つのページが左右に存在し、
左ページのDropDownイベントSelectedIndexChangedメソッドを機に
DataTableを取得し、右ページのGridViewでの表示を考えております。
データの受け渡しには現状ではSessionを利用しております。

Sessionでデータを受け取り、DataSourceにセット後、GridView.DataBind()
としているのですがどうやらBindメソッドが働いてない(Bindingイベントを
拾わないため)ようであり、その原因がわからない状態です。

ご教授よろしくお願いいたします。
THREE-ONE
常連さん
会議室デビュー日: 2006/08/17
投稿数: 36
投稿日時: 2007-02-28 23:23
実現させるためには、左ページの DropDownList の SelectedIndexChanged 後に、右ページのポストバックを起こさなければならないと思いますが、それは行ってらっしゃいますか?
左ページのコードビハインドで右ページの GridView の DataBind をやろうとしてませんよね?
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-01 14:34
引用:

THREE-ONEさんの書き込み (2007-02-28 23:23) より:
実現させるためには、左ページの DropDownList の SelectedIndexChanged 後に、右ページのポストバックを起こさなければならないと思いますが、それは行ってらっしゃいますか?
左ページのコードビハインドで右ページの GridView の DataBind をやろうとしてませんよね?



THREE-ONE様ご返答ありがとうございます。
まさしくご指摘いただいた通りの処理をしておりました。。。

そこで再度自分なりに調べてみましたところ、buttonのPostBackUrlのような
処理が必要なのかと思ってみたのですが、それがDropDownListで再現できるのか
どうかがわかりませんし、その方法についても見当がつきません。
申し訳ありませんが、ご教授いただけませんでしょうか。
よろしくお願いいたします。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-01 15:12
引用:
そこで再度自分なりに調べてみましたところ、buttonのPostBackUrlのような
処理が必要なのかと思ってみたのですが、それがDropDownListで再現できるのか
どうかがわかりませんし、その方法についても見当がつきません。


ドロップダウンを変更したときは何もせず、新たに用意したボタンを押下したタイミングで・・
って仕様だったら実現できそうですか?できるならあとはjavascriptで改良するだけなんですが、
ポストバック先のURLの問題よりもtargetの問題の方が重要な気がします。
ポストバック先だけ変えても、post結果は左フレームに表示されてしまいますよね。

実現方法としては、大きく分けて、
・左フレームのドロップダウンのonchange(かな?、クライアントのイベントですよ)の
タイミングで右フレームをsubmitさせる(おおよそTHREE-ONEさんの方法)
・左フレームのポストバック先を右フレーム用のページにし、かつtargetを右フレームにする

(サーバーイベントの)SelectedIndexChangedのタイミングでは遅い(というか左ページにポストバックする
必要がない)ような気がします。
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-02 10:26
べる様ご指摘ありがとうございます。
非常に勉強になります。

引用:

ドロップダウンを変更したときは何もせず、新たに用意したボタンを押下したタイミングで・・
って仕様だったら実現できそうですか?できるならあとはjavascriptで改良するだけなんですが、



仕様に関しては特に制限がありませんので、こちらの手法でも全く問題
ありませんので下記に挙げていただいた手法が難しいようであればこちらに
してみようと考えております。


引用:

実現方法としては、大きく分けて、
・左フレームのドロップダウンのonchange(かな?、クライアントのイベントですよ)の
タイミングで右フレームをsubmitさせる(おおよそTHREE-ONEさんの方法)
・左フレームのポストバック先を右フレーム用のページにし、かつtargetを右フレームにする



これら2つの手法、また上記のボタンでの手法を挙げていただいて
思ったことなのですが、csファイル上だけでは処理が不可能であり、
HTMLでの処理が必要ということでしょうか。

ドロップダウンのonchange・・といった手法も恥ずかしながら
理解できずにいます。図々しいかとは思いますが、よろしければ
サンプルコードのようなものをお見せいただけませんでしょうか。
よろしくお願いいたします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-02 11:29
引用:
これら2つの手法、また上記のボタンでの手法を挙げていただいて
思ったことなのですが、csファイル上だけでは処理が不可能であり、
HTMLでの処理が必要ということでしょうか。

そうですね。フレームが2つあるということは、別々のウインドウで2つのページを表示しているのと
あまり変わらないと考えるといいです。

左フレームのドロップダウンの選択値が、右フレームで必要になりますよね。
だとすると私が挙げた下側のやり方のほうが楽かなーと思います。

引用:
仕様に関しては特に制限がありませんので、こちらの手法でも全く問題
ありませんので下記に挙げていただいた手法が難しいようであればこちらに
してみようと考えております。

ボタン押下のタイミングでいいなら以下の2点をやれば、後はサーバーでの処理のみだと思います。
(私が挙げた下側の方法ということになります)
・formのtargetを右フレームにする。
・ボタンのPostBackUrlを右フレームのものにする。

引用:
ドロップダウンのonchange・・といった手法も恥ずかしながら
理解できずにいます。図々しいかとは思いますが、よろしければ
サンプルコードのようなものをお見せいただけませんでしょうか。
よろしくお願いいたします。

これといっていいサンプルを知らないですが、ドロップダウンのAutoPostBackをtrueにしたときに
クライアントに吐かれるソースが参考になると思います。c#側でクライアント属性を追加する方法は
Attributes.Addを調べてみてください
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-02 17:04
べる様

度々のご指導ありがとうございます。
ご教授いただいたボタンによる右ページへの移行に
仕様の変更を考えました。
教えていただいた通りtargetおよびpostbackurlを
右ページに設定しました。

ここで1つ問題が発生したのですが、現在の仕様では
左ページにドロップダウンリストが2つ存在しており、
1つはデータベースの選択、もう1つはテーブルの選択
としております。
そして、データベース選択時に存在するテーブルを
テーブル用ダウンリストのアイテムに追加しておりました。
そのため最初のデータベース選択時にautopostbackをしております。

データベースのドロップダウン選択時は左のページにpostback、
テーブル選択時(ボタン押し時)には右ページへpostback

といったようなことは実現可能でしょうか。
dropdownlistにはpostbackurlの機能は見当たりませんし・・

ご教授よろしくお願いいたします。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-02 19:49
引用:
ここで1つ問題が発生したのですが、現在の仕様では
左ページにドロップダウンリストが2つ存在しており、
1つはデータベースの選択、もう1つはテーブルの選択
としております。
そして、データベース選択時に存在するテーブルを
テーブル用ダウンリストのアイテムに追加しておりました。
そのため最初のデータベース選択時にautopostbackをしております。

だとすると、formのtargetを変えてしまうのはまずいですね。

引用:
データベースのドロップダウン選択時は左のページにpostback、
テーブル選択時(ボタン押し時)には右ページへpostback

といったようなことは実現可能でしょうか。

可能です。ボタン押下時にjavascriptでformのtargetを右にする処理を加えてやればいいです。
onClientClickに書けばpostbackurl用のスクリプトより前にかかれるみたいなんでそれでいいと思います。

ただ、このままだと、ボタンを押したあとにデータベース選択ドロップダウンをいじると
右フレームにsubmit(post)してしまうので、工夫が必要です。楽なのは下側だと思います↓
・postbackurl機能を自作する
・データベース選択ドロップダウン変更時にtargetを左にする処理を加える(結局onchange)


引用:
dropdownlistにはpostbackurlの機能は見当たりませんし・・

データベース選択ドロップダウンのポストバック先は左のページのままでいいし、
テーブル選択のドロップダウンは自動ポストバックを行わないんだからその機能は必要ありませんよね

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