在ASP.NET应用程序中,弹出窗口是一种常见的用户界面元素,用于显示额外信息或提供交互功能。GridView控件则用于显示和操作数据表。本文将介绍如何在弹出窗口中使用GridView控件,并展示如何在父页面和弹出页面之间传递数据。将使用两种形式的表单:父页面为parent.aspx,弹出页面为popup.aspx。注意,parent.aspx页面是从某个母版页继承而来的。本文提供了VB.NET和C#.NET两种语言的代码示例。
首先,来看父页面的HTML代码。在父页面中,将定义一个文本框和一个按钮,用户点击按钮时将打开弹出窗口。同时,将使用JavaScript函数OpenPopup()来控制弹出窗口的打开。
<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.NET还是C#.NET,都需要在页面加载时(非回发)添加按钮的点击事件处理程序。
// VB.NET
If Not IsPostBack Then
Me.Button1.Attributes.Add("onclick", "javascript:return OpenPopup();")
End If
// C#.NET
if (!IsPostBack) {
this.Button1.Attributes.Add("onclick", "javascript:return OpenPopup();");
}
然后是弹出页面的HTML代码。在弹出页面中,将定义一个GridView控件,用于显示数据。同时,将为GridView的每一行添加一个按钮,用户点击按钮时将选择该行的数据。
<script language="javascript">
function GetRowValue(val) {
// 硬编码值以简化代码。
// 也可以将ControlID作为查询字符串传递给弹出窗口
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.NET
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
' 假设所需的值列是GridView中的第二列
DirectCast(e.Row.FindControl("btnSelect"), Button).Attributes.Add("onclick", "javascript:GetRowValue('" & e.Row.Cells(1).Text & "')")
End If
End Sub
// C#.NET
protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) {
if ((e.Row.RowType == DataControlRowType.DataRow)) {
// 假设所需的值列是GridView中的第二列
((Button)e.Row.FindControl("btnSelect")).Attributes.Add("onclick", "javascript:GetRowValue('" + e.Row.Cells[1].Text + "')");
}
}