2009-04-17 84 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