我有一个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));
}
页面加载时,无论如何都不会对网格进行排序。如果我点击编辑,它工作正常。但是,如果我单击“编辑后排序”,它会在排序之前传递最初存在的行的ID,而不是当前存在的那个。
为什么会这样?有什么想法吗?
谢谢。
答案 0 :(得分:1)
您是否重新绑定数据集?
答案 1 :(得分:0)
在页面加载时,尝试在未回发页面时绑定网格。我的意思是页面加载中的以下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
PopulateGrid();
}
这是因为我怀疑,网格在每个帖子上被重新绑定,这可能会导致问题。
答案 2 :(得分:0)
如果想要保持其工作方式,可能还有另一种可能的解决方案。如果您使用按钮进行编辑,并且按钮的用户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