- PR -

【C#】モーダル画面からの戻り値を使って親画面で処理を継続させたい

1
投稿者投稿内容
村長
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 67
投稿日時: 2005-10-13 17:27

モーダル表示の子画面を閉じた時点で、子画面からの戻り値を使用して
呼び元の親画面で処理を継続させたいのですが、何か方法はないでしょうか?

【例】
@親画面から子画面(検索画面)をモーダル表示
A利用者が子画面でデータを選択(子画面終了)
B子画面で選択されたデータを親画面が受け取り、選択されたデータを編集して
親画面内に表示

※Aの子画面終了から親画面のデータ表示されるまでを一連の処理としたい
※子画面は汎用的に使用したいので、固有のロジックを埋め込みたくありません。
※画面はWebフォームです。

fizzy
会議室デビュー日: 2003/09/09
投稿数: 17
お住まい・勤務地: TOKYO
投稿日時: 2005-10-13 18:31
引用:

村長さんの書き込み (2005-10-13 17:27) より:

B子画面で選択されたデータを親画面が受け取り、選択されたデータを編集して
親画面内に表示





とありますが、親画面側で編集を行わなければならないのでしょうか?
子画面側で必要なデータを全て用意して、親画面側で取捨選択して表示という方法もあると思いますが。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-13 18:49
モーダル表示って何のことですか?
IEのshowModalDialog()のことですか?

それならshowModalDialog()の返り値として検索結果を返してもらえば良いのではないでしょうか。

子ウィンドウ側でreturnValueというのに値を設定しておくと、ウィンドウを閉じた時にその値がshowModalDialog()の返り値として取得できるようです。

村長
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 67
投稿日時: 2005-10-14 09:40
fizzyさん、返答ありがとうございます。

[/quote]

子画面側で必要なデータを全て用意して、親画面側で取捨選択して表示という方法もあると思いますが。
[/quote]

確かに子画面側で行うこともできますが、編集処理というのが今回に限った固有の処理であり、
全く別のシステムから同じ子画面を呼び場合は必要ない処理のため、できれば親画面側で行いたいと考えております。ただし、AからBの一連の処理を行う上で難しいようであれば
子画面側で行うことも考えております。

引用:

それならshowModalDialog()の返り値として検索結果を返してもらえば良いのではないでしょうか。

子ウィンドウ側でreturnValueというのに値を設定しておくと、ウィンドウを閉じた時にその値がshowModalDialog()の返り値として取得できるようです



一郎さん、返答ありがとうございます。
私もshowModalDialog()の返り値でreturnValueを使用する方法も考えましたが、これだと
クライアント側に戻りますよね?私はjavascriptがあまり得意ではないので、できればサーバ側(C#)で戻り値をとれないかと考えております。
また、子画面から親画面のコントロールに直接セットすることも考えましたが、
親画面の表示方法がデータグリッド表示のため、厳しい状況です。

私が考える理想的な動きですが、
@親画面が子画面を表示
A利用者が子画面でデータ選択
 (選択後、子画面は閉じ、選択されたデータを親画面のサーバ側に返す)
B親画面は戻り値を受け取り、編集したデータをDB登録
Cデータグリッドの再表示処理(DB検索、データバインドなど)を行い、
 元々表示してたデータ+子画面で選択されたデータを画面表示
※利用者から見た場合、子画面でデータを選択したら、親画面がCの状態になっている

かなり無理がある気がしますが、このWindowsフォームのような動きをWebフォームで
実現するのは無理でしょうか?


たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-14 10:05
ASP.NETでしたか。
環境を先に書いていただければ、より早く回答が集まったと思いますよ。

引用:

私もshowModalDialog()の返り値でreturnValueを使用する方法も考えましたが、これだと
クライアント側に戻りますよね?私はjavascriptがあまり得意ではないので、できればサーバ側(C#)で戻り値をとれないかと考えております。


サーバ側にあるC#を使って「親画面」の表示を変化させるためには、「親画面」が
submitされなければなりません。「子画面」から「親画面」をsubmitできますが、
JavaScript(JScript)を使うことになります。
JavaScriptを一切使いたくないのでしたら、この時点で要件を満たせないので断念するこ
とになります。


引用:

2.利用者が子画面でデータ選択
 (選択後、子画面は閉じ、選択されたデータを親画面のサーバ側に返す)
3.親画面は戻り値を受け取り、編集したデータをDB登録


(Web開発者なら丸付き数字はやめましょう)

2.と3.の間に非常に深い溝があります。
・(選択後、子画面は閉じ、選択されたデータを親画面のサーバ側に返す)
子画面をsubmitしても親画面は自動では変化しません。
子画面と親画面を別々にsubmitしたら、どちらが先に処理されるかという保障
が無いので、データを親画面に送ることができたりできなかったりになります。

JavaScriptで出来ますが、使えないということなら、子画面を使う設計という
ところを修正したほうがよいということになります。
タブブラウザで使う可能性を考えると、これから先子画面はあまり喜ばれない方向
に進んでいくと思いますし。


_________________
たつごろー http://www.codeseek.net
MS MVP - Visual Developer Visual Basic (2005/08 - 2006/07)

[ メッセージ編集済み 編集者: たつごろー 編集日時 2005-10-14 10:10 ]
fizzy
会議室デビュー日: 2003/09/09
投稿数: 17
お住まい・勤務地: TOKYO
投稿日時: 2005-10-14 10:08
showModalDialog()の返り値でreturnValueを使用する方法で実装できそうですね。

-----------------------------------------------------------------------------
@子画面でデータ選択されたらreturnValueで値を親画面に戻す。
AreturnValueが返ってきたら、hiddenなどにreturnValueをセットしsubmit()。
BPage_Loadイベントでhiddenの値による場合分けを行い、処理を実行
-----------------------------------------------------------------------------

いかがでしょうか?
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-10-14 11:51
1.子画面を開き、そこでデータを入力してデータベースを更新。
2.子画面から親画面の参照を取れるので、そこから親画面の検索ボタンをクリック(検索ボタンってありますよね?)

私が作るとしたら、流れ的にはこんな感じになると思いますが、どうしてもjavascriptを使う必要があります。
(参考)
[ASP.NET] datagridの選択ボタンで別画面をjavascriptで表示後
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13254&forum=7
村長
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 67
投稿日時: 2005-10-14 13:51
>たつごろーさん、fizzyさん

submit()を使うことによって、Page_Load時に選択されたデータを受け取ることが
できました。ありがとうございました。
あきらめかけてたので実現できて驚いてます。

>trapemiyaさん

子画面は汎用的に使う予定なので、親画面の特定のボタン操作はできません。
ただ、親画面のボタンを操作する発想がなかったので、そんなこともできるのかと
驚きました。今後役に立ちそうなので参考にさせてもらいます。
ありがとうございました。
1

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