我有一个web应用程序(ASP.NET 2.0 C#),其中一个页面上有一个Gridview。Gridview有3列(编辑、ID、名称),并且启用了排序。编辑不是以常规方式工作的:它使用ID并将其添加到QueryString,然后用户被带到编辑页面。如下所示:
protected void Grid_RowEditing(object sender, GridViewEditEventArgs e)
{
string editID = Grid.DataKeys[e.NewEditIndex].Value.ToString();
Response.Redirect("~/Admin/Edit_Page.aspx?EditID=" +
HttpUtility.HtmlDecode(editID));
}当页面加载时,网格无论如何都不会排序。如果我单击“编辑”,它就能正常工作。但是,如果我在排序后单击Edit,它将传递排序前最初在那里的行的ID,而不是当前行的ID。
为什么会发生这种情况?有什么想法吗?
谢谢。
发布于 2009-04-17 14:15:26
您是否正在重新绑定您的数据集?
发布于 2009-04-17 14:30:35
在页面加载时,尝试在页面未回发时绑定网格。我指的是页面加载中的以下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
PopulateGrid();
}这是因为我怀疑,网格在每次回帖时都会被重新绑定,这可能会导致问题。
发布于 2009-04-17 15:19:11
如果想要保持它的工作方式,可能还有另一种可能的解决方案。如果您使用按钮进行编辑,并将按钮的用户CommandName设置为“编辑”,并将CommandArgument设置为正在编辑的实体的id,那么它可能会起作用。我给你下面的代码。
代码隐藏:
protected void Grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit")
{
int intEditId = Convert.ToInt32(e.CommandArgument);
Response.Redirect("~/Admin/Edit_Page.aspx?EditID=" + intEditId);
}
}aspx文件:
在网格中:
<asp:TemplateField>
<ItemTemplate><asp:ImageButton CommandName="Edit"
CommandArgument='<%# Eval("EditID") %>' runat="server" ID="lnkEdit" ImageUrl="../images/edit.gif" ToolTip="View/Edit"></asp:ImageButton></ItemTemplate></asp:TemplateField>希望这能有所帮助。Anindya
https://stackoverflow.com/questions/760567
复制相似问题