Так что у меня есть этот флажок внутри 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();
}
}
}