- PR -

C#+ASP.NET 子ウィンドウに親ウィンドウのデータを渡したい

投稿者投稿内容
ウルフウッド
会議室デビュー日: 2007/06/26
投稿数: 11
投稿日時: 2007-06-26 11:20
初めて投稿させて頂きます。

VisualStodio2003でASP.NETアプリ開発しています。
WEBアプリは超初心者です。

親ウィンドウにDataGridを作成し、ボタン列を追加。
そのボタンを押した時に新しいウィンドウを表示し、
DataGridの行番号を新しいウィンドウに渡したいのですが、
どうやったら良いのか分かりません。

はじめは、
ボタン列のonclickイベントに子ウィンドウ表示を定義し、
ボタン列クリックイベントでボタンが押された行番号をSessionに登録、
その情報を子ウィンドウのPage_Loadメソッドで取得しようとしたのですが、
Sessionに登録する前に子ウィンドウが表示されてしまうために
うまく情報が渡せません。

<C#>
void DataGrid_ItemDataBound(省略)
{
Button.Attributes["onclick"] =
"window.open('DetailOfScore.aspx', '', '' )";
}

void DataGrid_ItemCommand(省略)
{
Session["DataRow"] = 行番号;
}

ご存知の方がいらしたら、
ご教授お願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-26 11:26
やり方は2つあると思います。
1.DataGrid_ItemCommand 時に Form の onLoad でウインドウを開く処理を埋め込む。
2.子ウインドウを開く引数に行番号を与える。
_________________
かるあ のメモスニペット
ウルフウッド
会議室デビュー日: 2007/06/26
投稿数: 11
投稿日時: 2007-06-26 11:41
TO かるあさん

素早い返答ありがとうございます。
早速、1.のやり方を調べてみたのですが・・・
よいサンプルが見つかりません。。。

申し訳ないのですが、
もし、何かサンプル等があれば
教えて頂けないでしょうか。

宜しくお願い致します。
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-06-26 17:43
2.のやり方でよければ。

void DataGrid_ItemDataBound(省略)
{
Button.Attributes["onclick"] =
"window.open('DetailOfScore.aspx?GYO=行番号', '', '' )";
}

あとは子画面で
Request.Params("GYO")
で拾えるかと思います。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-26 17:55
1だとこんな感じかな。
コード:
void DataGrid_ItemCommand(省略) {
  Session["DataRow"] = 行番号;
  Page.ClientScript.RegisterClientScriptBlock(String, "window.open('DetailOfScore.aspx')", true);
} 


とはいえ、これだと DetailOfScore.aspx を開くときにブラウザの警告に合うのでポップアップを許可しとかないとだめですね。
サーバ側で何か処理をした後に開きたいとかでなければ、よっし〜さんの方法がいいかも。
_________________
かるあ のメモスニペット
ウルフウッド
会議室デビュー日: 2007/06/26
投稿数: 11
投稿日時: 2007-06-26 18:30
TO よっし〜さん かるあさん

返答ありがとうございます。

あれから自分でも色々調べ、
1.の方法で解決しました。

void DataGrid_ItemCommand(省略)
{

Session["DataRow"] = oDataRow;

StringBuilder sb = new StringBuilder();
sb.Append("<script Language='javascript'>\n");
sb.Append("window.open('DetailOfScore.aspx', '', 'width=840,height=550')\n");
sb.Append("</");
sb.Append("script>");

this.RegisterClientScriptBlock("openwin", sb.ToString());
}

本当にありがとうございました。
また、宜しくお願いします。
IIJIMAS
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 77
投稿日時: 2007-06-26 18:54
本題とは関係ないですし、余計な御世話かもしれませんが、
StringBuilderは必要ないのではないでしょうか。
固定的文字列連結ならば、
&= 演算子 (Visual Basic)
http://msdn2.microsoft.com/ja-jp/library/fz1zs43f(VS.80).aspx
かリテラル(そのまま1行に記述)で(の方が)よいと思います。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-06-27 05:54
引用:

IIJIMASさんの書き込み (2007-06-26 18:54) より:
本題とは関係ないですし、余計な御世話かもしれませんが、
StringBuilderは必要ないのではないでしょうか。


文字列を連結するときは、StringBuilderの方が高速です。
サンプルを作成して検証してみてください。

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集

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