- - PR -
子画面から親画面のgridviewのテキストボックスに値を書き込む
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-05 17:18
ASP.NET(VB)で開発しております。
いつもお世話になっております。 親画面(parent)のgridviewの各行に表示しているボタン(BtnChild)をクリックすると子画面(child)を開きます。 次に子画面でボタンをクリックすると親画面のボタンをクリックした行のテンプレートフィールドのテキストボックス(txtName)に 値を書き込みたいのですがうまくいきません。 gridviewでない場合は??????????部分にテキストボックス名を指定すると書き込むことができますが、同じような指定で 実現できないのでしょうか? アドバイス等よろしくお願い致します。 ==ソース概要== □parent.aspx <asp:GridView ID="GridView1" ..... <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:Button ID="BtnChild" runat="server" CausesValidation="false" OnClick="BtnChild_Click" Text="子画面" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="名前"> <ItemTemplate> <asp:TextBox ID="txtName" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> □parent.aspx.vb Protected Sub BtnChild_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim btn As Button = DirectCast(sender, Button) Dim row As GridViewRow = DirectCast(btn.NamingContainer, GridViewRow) Dim No As Integer Dim str As String Session("No") = row.DataItemIndex '選択行ナンバー 「0」から開始 str = "window.open('Child.aspx?no','SubWindow','width=1050,left=90,HEIGHT=700,scrollbars=yes,status=yes')" Response.Write("<SCRIPT Language='JScript'>") Response.Write(str) Response.Write("</Script>") End Sub □child.aspx.vb str = "window.opener.form1.??????????.value = '" + Namewk + "';" Response.Write("<script language='JavaScript'>") Response.Write(str) Response.Write("</script>") | ||||||||||||
|
投稿日時: 2007-11-05 17:56
Template 内の TextBox の ID に注目して、自動生成された HTML をまず確認しましょう。
GridView の 選択行 の TextBox の ClientID を子供のページに知らせてあげる必要があると思う。 _________________ かるあ のメモ と スニペット | ||||||||||||
|
投稿日時: 2007-11-06 13:31
かるあさん、ありがとうございます。
ClientIDプロパティでIDを取得し、子供のページから書き込むときに使用するようにして解決しました。 とっても助かりました。ほんとにありがとうございました。 ただ、ClientIDプロパティで取得したIDは「GridView1_ctl02_ctl00」となっていて、そのままでは子供のページから書き込むときにエラーになったため、自動生成されたHTML内のIDにあわせて「ctl00」の部分をテキストボックスの名前の「txtName」に変更しました。 これでうまく書き込みが出来たのですが、この対応でよかったのでしょうか。。。。。。 ==ソース概要== □parent.aspx.vb CID = row.Cells(13).ClientID Session("CID") = Left(CID, InStrRev(CID, "_")) + "txtName" □child.aspx.vb str = "window.opener.form1." + Session("CID") + ".value = '" + Namewk + "';" | ||||||||||||
|
投稿日時: 2007-11-06 13:58
まぁコントロール名をどう子供に渡すかは置いておいて。。。 Row の ClientID でも Cell の ClientID でもなくて、対象コントロールの ClientID を渡たす必要があると思います。
#手打ちだから間違ってるかも(汗 _________________ かるあ のメモ と スニペット | ||||||||||||
|
投稿日時: 2007-11-06 15:23
かるあさん、さっそくありがとうございます。
コントロールを確定できていれば、CELLで渡しても同じIDを取得するのかと勘違いしてました。 教えていただいた、 Dim targetControl As TextBox = TryCast(row.FindControl("txtKaitoPN"), TextBox) Dim targetId As String = targetControl.ClientID で、ばっちりうまくいきました。感謝です!!m(__)m 思い切って質問してみてよかったです!! |
1