グリッドビュー内にこのチェックボックスがあり、ほとんどの部分が正しく機能しています。しかし、グリッドに列ソートを実装しようとしていますが、チェックボックスに問題があります。データベースから最初のフェッチを実行すると、チェックボックスが正しく挿入されますが、列をクリックして並べ替えると、すべてのチェックボックスがクリアされます。グリッドビューチェックボックスでソート中に情報が失われる
これは、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();
}
明らかに私のソートに間違いがありますか?必要に応じてより多くのコードを提供することができます。要求されたよう
は、ここにあなたがデータベースからではないのチェックボックスを移入が、あなたのセル11の内容(それが何であれ)に対応しているように見えます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