在Gridview_Sorting之后编辑搞乱

时间:2009-04-17 14:10:39

标签: c# asp.net gridview sorting editing

我有一个Web应用程序(ASP.NET 2.0 C#),在其中一个页面上我有一个GridviewGridview有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,而不是当前存在的那个。

为什么会这样?有什么想法吗?

谢谢。

3 个答案:

答案 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