2011-07-11 29 views
2

因此,我在GridView中有這個複選框,它的大部分工作正常。但是,我正在嘗試對網格實施列排序,並且導致複選框出現問題。當我從數據庫中進行初始提取時,它會正確填充複選框,但是當我單擊列進行排序時,我的所有複選框都會被清除。Gridview複選框在排序過程中丟失信息

看來這是Databind由GridView完成的問題,但我不確定我做錯了什麼。我對這個問題的研究使我感覺我有這個問題,但我不確定(遺留代碼:我討厭它)。

<asp:GridView ID="UserListGrid" runat="server" 
    OnSorting="UserListGrid_Sort" AllowSorting = "True" AutoGenerateColumns="False" 
    AllowPaging="True" PageSize="25" OnRowDataBound="UserListGrid_RowDataBound" 
    OnPageIndexChanging="UserListGrid_PageIndexChanging"> 

。 。 。

<ItemTemplate> 
     <asp:CheckBox ID="ActiveCheck" runat="server" SortExpression="ActiveCheck"/>             
    </ItemTemplate> 

。 。 。

protected void UserListGrid_Sort(object sender, GridViewSortEventArgs e) 
{ 
     // ViewState["CurTab"] = 0; 
     DataTable Data = myData.GetSessionRoster(TeamID); 
     DataView UserListView = new DataView(Data); 
     ViewState["SortDirection"] = myData.ConvertSortDirectionToSql(ViewState["SortDirection"] == null ? "" : ViewState["SortDirection"].ToString()); 
     UserListView.Sort = e.SortExpression + " " + ViewState["SortDirection"]; 
     UserListGrid.DataSource = UserListView; 
     UserListGrid.DataBind(); 
} 

有什麼明顯的錯誤與我的排序?如果需要,我可以提供更多的代碼。

按照要求,這裏是UserListGrid_RowDataBound

protected void UserListGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType != DataControlRowType.DataRow) 
    { 
     return; 
    } 
    // See which users are active 
    CheckBox ActiveCheck = (CheckBox)e.Row.Cells[1].FindControl("ActiveCheck"); 
    if (ActiveCheck != null) 
    { 
     ActiveCheck.Enabled = true; 
     if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack) 
     { 
      ActiveCheck.Checked = true; 
      ActiveCheck.DataBind(); 
     } 
    } 
} 
+0

你能否也顯示在UserListGrid_RowDataBound中會發生什麼? – Kirill

+0

而這個結局看起來有點奇怪:OnPageIndexChanging =「> – Kirill

+0

編輯添加UserListGrid_RowDataBound並修復我的asp被截斷 – Bennie

回答

1

它看起來像你從數據庫填充複選框沒有,但對應的單元11中的內容(不管它是什麼)。 我呼籲這行代碼:

if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack) 

雖然排序您重新綁定你的GridView,但你限制填充和回傳你的複選框重新綁定。這可能是複選框丟失值的原因。

+0

是的!非常感謝你指出這一點。這個bug一直困擾着我,整天必須做的是拿出!Page.IsPostback。我認爲這已經修復了 – Bennie

0

我沒有看到你保存你的複選框的數據。但是,最好的方法是在每次向服務器請求時保存最終用戶所做的所有更改。據我所見,存儲在DataTable中的數據。因此,一般來說,您應該瀏覽所有網格行,找到它們中的CheckBox並將它們的值保存在此表中。這應該在Page_Load方法中完成。這對於UserListGrid_RowDataBound事件處理程序中的代碼正常工作而言是必需的。