- - PR -
親画面にある値の取得方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-08 13:29
お世話になります。
VB2005にてWEBアプリケーションを作成しております。 親画面から子画面を開いた際に、 親画面のGridviewにあるLabelの値を子画面で取得したいです。 GridViewにTempleteFieldを設け、そこにButtonをおきました。 このButtonを押すと子画面が開きます。 この時にButtonを押した行のLabelの値を子画面のテキストボックスへ取得したいのですが、 方法がわかりません。 宜しくお願いします。 | ||||||||
|
投稿日時: 2008-09-08 13:40
JavaScriptでやることですね。
google先生に聞いてみればイヤというほどサンプルが見るかると思います。 | ||||||||
|
投稿日時: 2008-09-08 14:00
場合にもよりますが、発想を逆転させてみるのはどうでしょう。 「親画面の値を子画面から取得する」のではなく、 「子画面を開くときに、必要な値を親画面から渡す」ってな具合に。 | ||||||||
|
投稿日時: 2008-09-08 15:30
もん吉様 ありがとうございます。
早速、サンプルをあたってみます。 rain様、ありがとうございます。 必要な値を親画面から渡す方法として、 「FindControl」を使用するのかなと思ったのですが、 GridviewでButtonを押した行のLabelをFindControlで取得しようと しましたが、記述方法がわかりませんでした。 | ||||||||
|
投稿日時: 2008-09-09 15:03
色々調べてみて「session」を使用する事がわかりました。
インターネットでサンプルがあったので、試してみたのですが子画面で値が取得できません。 どこがおかしいのか、ご指摘お願い致します。 親.aspx.vb Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand Dim grid As GridView = TryCast(sender, GridView) If grid Is Nothing Then Exit Sub End If If e.CommandName = "完了" Then Dim index As Integer = Convert.ToInt32(e.CommandArgument) Context.Session("番号") = e.CommandArgument Context.Session("品名") = CType(grid.Rows(index).FindControl("Label6"), Label).Text End If End Sub Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated If Not e.Row.RowType = DataControlRowType.DataRow Then Exit Sub End If Dim row As GridViewRow = e.Row Dim btn As Button = CType(row.Cells(0).FindControl("完了"), Button) btn.CommandArgument = e.Row.RowIndex Dim scriptsource As String scriptsource = "javascript:window.open('子.aspx','subwin','width=300,height=300,menubar=no,tollbar=no');" btn.OnClientClick = scriptsource End Sub 子.aspx.vb Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim hin As TextBox = 子.Row.FindControl("品名TextBox") hin.Text = Session("Label6") End Sub | ||||||||
|
投稿日時: 2008-09-09 16:47
一番下の方に
hin.Text = Session("Label6") とありますが、Session("Label6") って何ですか? あと、列の番号をSessionに格納する理由も解せないのですが… 渡したいのは品名ですよね? --- 別解になりますが、改ざんされて困るようなデータでないのなら、 テンプレートのボタンのOnClientClickをデータバインドの設定で Eval("品名", "window.open('child.aspx?hinmei={0}'); return false;") という具合にしてやれば一発ですね。 あとは子画面のRequest.QueryString("hinmei")で取得するだけと。 _________________ //--- あやのこうじ@RapidExpress [ メッセージ編集済み 編集者: RapidExpress 編集日時 2008-09-09 16:48 ] | ||||||||
|
投稿日時: 2008-09-09 18:06
RapidExpress様、ありがとうございます。
hin.Text=Session("品名")の間違いでした。 RapidExpress様より頂いた別解で試してみましたが、 「オブジェクトを指定してください。」というjavascriptのエラーが出てしまいました。 再度、調べてみます。 | ||||||||
|
投稿日時: 2008-09-10 10:05
こんにちわ。
javascriptのエラーと直接関係はないと思いますが、 ちょっと安直過ぎたところがあったので訂正させてください。
これでおそらく大丈夫なはず。 あともう一点。私も気付くのが今さらで恐縮なんですが、 現状のSessionでの受け渡しというのはまずいような気がします。OnClientClickで ウィンドウを開いてしまうと、子のページがSessionを参照する前に親がSessionの 値を設定しているという保証がないからです。(仮に取得できていてもそれは偶然) 親が値をセットしたことを保証するには、OnClientClickで開かせるのではなく、 サーバから処理が返された時に開かせるようにする必要があります。
ただしこの方法はポップアップブロックに引っ掛かりますので注意が必要です。 _________________ //--- あやのこうじ@RapidExpress |