0

我有一个 Web 应用程序(ASP.NET 2.0 C#),在其中一个页面上我有一个Gridview. 有Gridview3 列(编辑、ID、名称),并且启用了排序。Edit 不能以常规方式工作:它使用 ID 并将其添加到QueryString,然后用户被带到 Edit 页面。像这样的东西:

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,而不是当前存在的行的 ID。

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

谢谢你。

4

3 回答 3

1

你在重新绑定你的数据集吗?

于 2009-04-17T14:15:25.863 回答
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>

希望这可以帮助。阿宁迪亚

于 2009-04-17T15:19:10.703 回答
0

在页面加载时尝试在页面未回发时绑定网格。我的意思是页面加载中的以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
        PopulateGrid();
}

这是因为我怀疑,网格会在每个帖子上重新绑定,这可能会导致问题。

于 2009-04-17T14:30:34.517 回答