2017-01-30 9 views
1

私は既に動作している別のモジュールの値を保持するはずのGridViewを作成しましたが、ページを変更するたびに選択した値は既に忘れています。私はいくつかのコードを作りました。私はASPの初心者なので、私は間違ったことをexcatlyしていません。どんな助けでも大歓迎です。固定チェックボックスグリッドビューがページ内を移動しない

インデックスが失われるたびに、元のものを保持しているようです。

ありがとうございます!

+0

サイドノート:チェックボックスの状態値を 'Session'の代わりに' ViewState'に保存するほうがよいでしょう。 'Session'を使うことで、ユーザが同じページ上で複数のウィンドウ/タブを開いている場合、アプリケーションは予期しない動作をします。 – Dai

+0

また、 'Response.Write'を使用すると、出力バッファにデータが不適切に書き込まれます(' Response.Write'はコントロールの 'Render'メソッド内でのみ使用し、ページライフサイクルでは他には使用しないでください)。コードはレスポンスヘッダを書き込むことを決定します(レスポンスボディの最初のバイトが送信された後にヘッダを変更することはできません)。 – Dai

+0

ありがとうございました。しかし、これがうまくいかない原因の洞察はありますか?これは私の貧しい専門知識を超えています。 –

答えて

0

GridViewに付属の組み込みページングを使用している場合は、常にページインデックスを使用できます。一般的には、は決してとなり、PageIndexはPageIndexChangingイベントに設定されます。 e.NewPageIndexはgvApplicants.PageIndex となります。は、そのイベントが完了した後になる予定です。

次のことを推測できますか?

  1. 各行にチェックボックスがあり、状態がLoadData()の呼び出しの一部ではないと判断できます。
  2. PageIndexChangingイベントでセーブステートを処理するときに、各チェックボックスでAutoPostBackが無効になります。

    :ページが正しく関連付けられているチェックボックスPageIndexChangingでそう


    を識別することができますビューステートに保持されている一意のIDを作成する必要が変わるの間でチェックされた状態に保持するために

protected void gvApplicants_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView gv = (GridView) sender; 

    foreach(GridViewRow gvr in gv.Rows){ 
     CheckBox cb = (CheckBox) gvr.FindControl("selectedMail"); 
     String cbid = String.Format("cb{0}", gv.PageIndex * gv.PageSize + gvr.RowIndex); 

     ViewState[ cbid ] = cb.Checked; 
    } 
} 

およびリストアする:

protected void gvApplicants_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     GridView gv = (GridView)sender; 
     CheckBox cb = (CheckBox) e.Row.FindControl("selectedMail"); 

     String cbid = String.Format("cb{0}", gv.PageIndex * gv.PageSize + e.Row.RowIndex); 

     cb.Attributes["data-unique-id"] = cbid; 
     cb.Checked = ViewState[ cbid ]; 
    } 
} 

これは行の削除の管理はもちろんのこと、非常に単純で面倒です。しかし、あなたのセッションを短期間の状態データで補うよりも優れています。

インデックスプロパティからアクセスできる永続的なコレクションを使用して状態データを統合することを検討してください。 SOにはたくさんの例があります。

関連する問題