因此,我在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();
}
}
}
你能否也顯示在UserListGrid_RowDataBound中會發生什麼? – Kirill
而這個結局看起來有點奇怪:OnPageIndexChanging =「> – Kirill
編輯添加UserListGrid_RowDataBound並修復我的asp被截斷 – Bennie