Linkbutton上的Gridview单击,将完整的GridRow信息传递到下一页?有什么方法可以做到这一点?

时间:2015-09-28 21:57:46

标签: c# asp.net gridview

我有Gridview,其中有6个其他BoundField列和一个Linkbutton列。 我想在用户点击LinkBut​​ton时将所有Row信息传递到下一页。

这样做的最佳方法是什么? 如果我们将它作为QueryString传递,它将会太长。

由于

2 个答案:

答案 0 :(得分:4)

您可以使用LinkButton列本身。

我们的想法是将LinkBut​​ton的RowIndex属性中GridViewRowPostBackUrl作为QueryString参数发送。

使用代表行索引的Container.DataItemIndex

在Next / Destination页面,从QueryString获取RowIndex以获取GridViewRow,然后读取Column值。

步骤1.)与LinkBut​​ton对应的标记应如下所示:

<asp:TemplateField>
      <ItemTemplate>
          <asp:LinkButton ID="lnkDetails" runat="server" Text="Send Details"
              PostBackUrl='<%# "~/NextPage.aspx?RowIndex=" +
                            Container.DataItemIndex %>'>
          </asp:LinkButton>
      </ItemTemplate>
 </asp:TemplateField>

步骤2.)在NextPage.aspx的Page Load事件中,首先获取单击LinkBut​​ton的GridViewRow,然后读取行值

请注意,使用PostBackUrl属性实质上会使跨页回发,因此您可以使用属性Page.PreviousPage

protected void Page_Load(object sender, EventArgs e)
{
    if (this.Page.PreviousPage != null)
    {
        int rowIndex = int.Parse(Request.QueryString["RowIndex"]);
        GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("GridView1");
        GridViewRow row = GridView1.Rows[rowIndex];

        //Since you use Bound Fields, use row.Cells[] to read values
        String Column_One_Value = row.Cells[0].Text;
        String Column_Two_Value = row.Cells[1].Text;
    }
}

答案 1 :(得分:2)

太长是主观的,无论如何,如果您不想使用QueryString,您可以使用Session Variables,会话变量会保留在整个网站上< / p>

protected void gvUsers_PageIndexChanging(object sender, EventArgs e)
{
    Session["TheSelectedRow"] = ((Control)sender).Parent as GridViewRow; 
    // Your code to redirect 
}

或者您可以将它们包装在属性中,以便更好地工作,并且避免每次在不同的行和拼写错误中进行

public GridViewRow TheSelectedRow
{
    get { return Session["TheSelectedRow"] == null ? null : Session["TheSelectedRow"] as GridViewRow; }
    set { Session["TheSelectedRow"] = value; }
}

然后在您的点击事件中

protected void gvUsers_PageIndexChanging(object sender, EventArgs e)
{
    TheSelectedRow = ((Control)sender).Parent as GridViewRow; 
    // Your code to redirect 
}