- PR -

DataGridをで選択した項目を子ウィンドウにパラメータを渡したい

1
投稿者投稿内容
まごのて
会議室デビュー日: 2004/08/04
投稿数: 4
投稿日時: 2004-08-04 19:11
ASP.netで、WebMatrixを利用してWebページを開発を
しているのですが、壁にぶちあたってしまったので教えてください。

DataGridを利用してデータベースのレコードをセットして、
その情報を元に子ウィンドウを立ち上げて詳細の情報を
テキストボックスに表示をさせたいのですが、うまくできません。
そこで、以下の事を教えていただけないでしょうか。

その1:
DataGridで選択用のボタンを作成し、
ボタンをクリックしたら子ウィンドウを立ち上げたいの
ですが、色々と試したのですが、2回クリックしないと
立ち上がらなかったり、ボタン以外の部分を
クリックしても立ち上がったりと、うまくいきません。
試したのは

Sub Page_Load()
datagrid1.Attributes.Add("onClick", "window.open('open6.aspx')")
End Sub
この場合だと、DataGridの選択用ボタン以外の場所を
クリックしても、子ウィンドウが立ち上がってしまいます。

Sub DataGrid1_SelectedIndexChanged(sender As Object, e As EventArgs)
datagrid1.Attributes.Add("onClick", "window.open('open6.aspx')")
End Sub
この場合だと、DataGridの選択用ボタンを1回目にクリックした場合では
子ウィンドウが立ち上がらず、2回目以降で子ウィンドウが
立ち上がります。


その2:
DataGridで選択した情報を子ウィンドウにパラメータを
引き継ぎたいのですが、可能なんでしょうか。
もし可能でしたら、どのような方法で
パラメータを渡せばよいのでしょうか?


よろしくおねがいします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-04 22:36
引用:

まごのてさんの書き込み (2004-08-04 19:11) より:

その1:
DataGridで選択用のボタンを作成し、
ボタンをクリックしたら子ウィンドウを立ち上げたいの
ですが、色々と試したのですが、2回クリックしないと
立ち上がらなかったり、ボタン以外の部分を
クリックしても立ち上がったりと、うまくいきません。
試したのは

Sub Page_Load()
datagrid1.Attributes.Add("onClick", "window.open('open6.aspx')")
End Sub
この場合だと、DataGridの選択用ボタン以外の場所を
クリックしても、子ウィンドウが立ち上がってしまいます。

Sub DataGrid1_SelectedIndexChanged(sender As Object, e As EventArgs)
datagrid1.Attributes.Add("onClick", "window.open('open6.aspx')")
End Sub
この場合だと、DataGridの選択用ボタンを1回目にクリックした場合では
子ウィンドウが立ち上がらず、2回目以降で子ウィンドウが
立ち上がります。


 なんか、非常に惜しいような、的はずれなような
 その1で、ボタン以外をクリックしても…というのは、なぜそうなるのか、理解されているでしょうか。DataGridの属性としてonclickを追加しているので、DataGrid、HTML上ではtable要素ですが、table要素のどこをクリックしても…ということです。
 その2ですが、なぜ1回目は表示されないのか。それは、1回目のクリックで、ボタンの属性にonclickを追加しているからです。初回表示では、onclickがないので、表示されないのです。

 では、どうやって1回目のクリックで表示させましょうか。
 1つの方法は、テンプレートカラムにボタンをおいて、属性を付加する方法です。このとき、<asp:button>ではなく、HTMLのボタンコントロールを置きます。
 もう一つの方法は、Page.RegisterStartupScriptメソッドを使って、サーバに返ってきたときにスクリプトを、属性としてではなく、ページのスクリプトとして登録する方法です。

 時間があるなら、両方試してみて、お好きな方で。


引用:

その2:
DataGridで選択した情報を子ウィンドウにパラメータを
引き継ぎたいのですが、可能なんでしょうか。
もし可能でしたら、どのような方法で
パラメータを渡せばよいのでしょうか?


 パラメータで渡すと、リクエストに丸見えになりますから、セッションオブジェクトに入れる、というのがよいようです。
 私は、キーだけ渡して、子ウインドウ側のサーバコードで、もう一度検索しています。
まごのて
会議室デビュー日: 2004/08/04
投稿数: 4
投稿日時: 2004-08-05 13:58
引用:


 では、どうやって1回目のクリックで表示させましょうか。
 1つの方法は、テンプレートカラムにボタンをおいて、属性を付加する方法です。このとき、<asp:button>ではなく、HTMLのボタンコントロールを置きます。
 もう一つの方法は、Page.RegisterStartupScriptメソッドを使って、サーバに返ってきたときにスクリプトを、属性としてではなく、ページのスクリプトとして登録する方法です。

 時間があるなら、両方試してみて、お好きな方で。



Jittaさんへ
返信ありがとうございました。

ASP.NET&Web開発初心者の私では少し理解できなかったのですが、
Page.RegisterStartupScriptは具体的にはどのように利用すれば
よろしいのでしょうか?


引用:

 パラメータで渡すと、リクエストに丸見えになりますから、セッションオブジェクトに入れる、というのがよいようです。
 私は、キーだけ渡して、子ウインドウ側のサーバコードで、もう一度検索しています。



こちらに関してですが、子ウィンドウを開く時に一緒に
パラメータを渡したのですが、この場合はJavaScriptで
パラメータを埋め込めばよろしいのでしょうか?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-08-05 14:35
各選択ボタンのAttributes["onclick"]に
"window.open('open6.aspx?key=値', '_blank');return false;"
を代入すればいいでしょう。

http://www.atmarkit.co.jp/fdotnet/dotnettips/104confirmdg/confirmdg.html
1

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