Passing values from a popup window back to the parent page is an often asked
question. Especially when there is a GridView type control in the popup. In the
following example we will be using two forms. The parent form will be
parent.aspx and the popup will be popup.aspx. Also note that the parent.aspx
form is derived from some MasterPage. Code is provided both in VB.Net and
C#.Net.
--- .aspx of parent form ---
<script type="text/javascript">
function OpenPopup()
{
window.open("popup.aspx","List","scrollbars=no,resizable=no,width=400,height=280");
return false;
}
</script>
.
.
.
<asp:TextBox ID="txtPopupValue" runat="server" Width="327px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Show List" />
--- .vb of parent.aspx if vb.net is the language ---
If Not IsPostBack Then
Me.Button1.Attributes.Add("onclick", "javascript:return OpenPopup()")
End If
--- .cs of parent.aspx if C#.net is the language ---
if (!IsPostBack) {
this.Button1.Attributes.Add("onclick", "javascript:return OpenPopup()");
}
--- .aspx of popup form ---
<script language="javascript">
function
GetRowValue(val)
{
// hardcoded value used to
minimize the code.
// ControlID can instead
be passed as query string to the popup window
window.opener.document.getElementById("ctl00_ContentPlaceHolder1_TextBox2").value = val;
window.close();
}
</script>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<AlternatingItemTemplate>
<asp:Button ID="btnSelect" runat="server" Text="Select" />
</AlternatingItemTemplate>
<ItemTemplate>
<asp:Button ID="btnSelect" runat="server" Text="Select" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
--- .vb file if vb.net is the language ---
Protected Sub GridView1_RowDataBound(ByVal sender As
Object, ByVal
e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType =
DataControlRowType.DataRow) Then
'assuming that the
required value column is the second column in gridview
DirectCast(e.Row.FindControl("btnSelect"), Button).Attributes.Add("onclick", "javascript:GetRowValue('" &
e.Row.Cells(1).Text & "')")
End If
End Sub
--- .cs file if C#.net is the language ---
protected void GridView1_RowDataBound(object sender,
System.Web.UI.WebControls.GridViewRowEventArgs e) {
if ((e.Row.RowType
== DataControlRowType.DataRow)) {
//assuming that the
required value column is the second column in gridview
((Button)e.Row.FindControl("btnSelect")).Attributes.Add("onclick", "javascript:GetRowValue('" + e.Row.Cells[1].Text +
"')");
}
}
I hope the code above is straight forward and easy to understand.
Happy Coding!!!