65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.69/5 (19投票s)

2005年12月8日

2分钟阅读

viewsIcon

140865

downloadIcon

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>

就是这样了!

© . All rights reserved.