- PR -

子画面から親画面のgridviewのテキストボックスに値を書き込む

1
投稿者投稿内容
ますます
会議室デビュー日: 2007/11/05
投稿数: 3
投稿日時: 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>")



かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-11-05 17:56
Template 内の TextBox の ID に注目して、自動生成された HTML をまず確認しましょう。

GridView の 選択行 の TextBox の ClientID を子供のページに知らせてあげる必要があると思う。
_________________
かるあ のメモスニペット
ますます
会議室デビュー日: 2007/11/05
投稿数: 3
投稿日時: 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 + "';"
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-11-06 13:58
引用:

ますますさんの書き込み (2007-11-06 13:31) より:

==ソース概要==
□parent.aspx.vb
コード:
 	CID = row.Cells(13).ClientID
	Session("CID") = Left(CID, InStrRev(CID, "_")) + "txtName"




まぁコントロール名をどう子供に渡すかは置いておいて。。。
Row の ClientID でも Cell の ClientID でもなくて、対象コントロールの ClientID を渡たす必要があると思います。
コード:
Dim targetControl As TextBox = TryCast(row.FindControl("txtName"), TextBox)
If targetID Is Nothing Then
  return
End If

Dim targetId As String = targetControl.ClientID


#手打ちだから間違ってるかも(汗
_________________
かるあ のメモスニペット
ますます
会議室デビュー日: 2007/11/05
投稿数: 3
投稿日時: 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

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