2011-07-11 17 views
2

グリッドビュー内にこのチェックボックスがあり、ほとんどの部分が正しく機能しています。しかし、グリッドに列ソートを実装しようとしていますが、チェックボックスに問題があります。データベースから最初のフェッチを実行すると、チェックボックスが正しく挿入されますが、列をクリックして並べ替えると、すべてのチェックボックスがクリアされます。グリッドビューチェックボックスでソート中に情報が失われる

これは、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(); 
     } 
    } 
} 
+0

また、UserListGrid_RowDataBoundに何が起こっているかを表示できますか? – Kirill

+0

そして、このエンディングはちょっと変わっています:OnPageIndexChanging = "> – Kirill

+0

UserListGrid_RowDataBoundを追加して編集した私のaspを修正しました – Bennie

答えて

1

です。あなたのGridViewを再バインド仕分けしながら

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

ていますが、ポストバックに投入して、チェックボックスの再結合制限: 私はこのコード行にアピール。これはチェックボックスが値を失う原因となります。

+0

はい、ありがとうございました、この点を指摘してくれてありがとうございました。私はそれを修正したと思います – Bennie

0

あなたのチェックボックスのデータをどこに保存しているのかわかりません。しかし、良い方法は、すべての要求がエンド・ユーザーによって行われたすべての変更をサーバーに保存することです。私が見るところでは、データはDataTableに保存されています。したがって、一般的には、すべてのグリッド行をブラウズし、その中のCheckBoxを見つけて、このテーブルに値を保存する必要があります。これはPage_Loadメソッドで行う必要があります。これは、UserListGrid_RowDataBoundイベントハンドラのコードが正しく動作するために必要です。

関連する問題