我有Gridview,其中有6个其他BoundField列和一个Linkbutton列。 我想在用户点击LinkButton时将所有Row信息传递到下一页。
这样做的最佳方法是什么? 如果我们将它作为QueryString传递,它将会太长。
由于
答案 0 :(得分:4)
您可以使用LinkButton
列本身。
我们的想法是将LinkButton的RowIndex
属性中GridViewRow
的PostBackUrl
作为QueryString参数发送。
使用代表行索引的Container.DataItemIndex
。
在Next / Destination页面,从QueryString获取RowIndex以获取GridViewRow,然后读取Column值。
步骤1.)与LinkButton对应的标记应如下所示:
<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事件中,首先获取单击LinkButton的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
}