2009-04-17 89 views
0

我有一个网络应用程序(ASP.NET 2.0的C#),并在其中一个页面我有一个GridviewGridview有3列(编辑,ID,名称),并启用排序。编辑不能以传统方式工作:它使用ID并将其添加到QueryString,并且用户被带到编辑页面。类似这样的:Gridview_Sorting后编辑搞乱

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。

这是怎么发生的?有任何想法吗?

谢谢。

+0

你可以在Page_Load()方法中发布数据绑定代码吗? – 2009-04-17 14:24:17

回答

1

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

+0

这是你要发表评论的内容 – TStamper 2009-04-17 14:26:23

0

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

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

这是因为我怀疑,网格越来越rebinded每个帖子后面这可能会导致问题。

+0

对不起...那没用... – zohair 2009-04-17 14:46:39

0

如果要保持它的工作方式,可能有另一种可能的解决方案。如果使用按钮进行编辑,并且按钮的用户CommandName是“edit”,并且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