将值从子页面传递到父页面






3.69/5 (19投票s)
2005年12月8日
2分钟阅读

140865

285
在本文中,我将向您展示如何在子页面中进行一些选择,并将这些选择传递到父页面。
引言
很多人问我如何从子页面向父页面传递一个值。在本文中,我将向您展示如何在子页面中进行一些选择,并将这些选择传递到父页面。
创建父页面
我们的父页面将包含一个按钮和一个 GridView
控件。该按钮将简单地打开一个新窗口(子窗口)。让我们看看父页面的代码
protected void Page_Load(object sender, EventArgs e)
{
if (Session["SelectedItems"] != null)
{
GridView1.DataSource = (DataTable)Session["SelectedItems"];
GridView1.DataBind();
}
}
为了打开子窗口,在 HTML 视图中编写以下代码。当单击按钮时,将调用 OpenWindow
函数。
<input type="button" value="Open a new window"
onclick="OpenWindow()" id="Button1" />
function OpenWindow()
{
window.open("NewWindow.aspx","MyWindow","height=450,width=300");
}
好的,上面的代码将打开一个子窗口。现在让我们看看子窗口的样子
子窗口
我们的子窗口将包含一个 GridView
控件。GridView
控件还将具有复选框,以便您可以选择各种行。单击按钮后,子窗口将关闭,您将在父窗口中看到选定的项目。
这是子页面按钮点击事件
protected void Button1_Click(object sender, EventArgs e)
{
// Make a datatable which will hold the values
DataTable myTable = new DataTable();
myTable.Columns.Add("CategoryID");
myTable.Columns.Add("CategoryName");
DataRow myRow = null;
foreach (GridViewRow row in gvChild.Rows)
{
bool result = ((CheckBox) row.FindControl("CheckBox1")).Checked;
if (result)
{
myRow = myTable.NewRow();
myRow["CategoryID"] = row.Cells[0].Text;
myRow["CategoryName"] = row.Cells[1].Text;
myTable.Rows.Add(myRow);
}
}
Session["SelectedItems"] = myTable;
}
我所做的是循环遍历 GridView
并找到哪些行被选中,最后将项目放入 DataTable
对象中。在上面的示例中,我使用 row.Cells[0].Text
属性的 GridViewRow
,但您可以轻松使用 row.FindControl("控件的 ID")
。FindControl
方法的好处是,如果您稍后更改列的位置,则无需更改代码中的任何内容。
一旦您在 DataTable
对象中获取了选定的项目,只需将它们放在会话变量中即可。现在唯一剩下的任务是在父窗口上进行回发,并在单击按钮时关闭子窗口。
这是将完成此操作的代码(此代码适用于子窗口)
<body onunload="PassValues()">
<script language="javascript" type="text/javascript">
function PassValues()
{
window.opener.document.forms(0).submit();
self.close();
}
</script>
就是这样了!