- PR -

GridViewでページ遷移時チェックボックスの状態を保存する方法

1
投稿者投稿内容
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-04-04 11:39
初めまして。この度はお世話になります。
VisualStudio2005で、Webアプリケーションを作っています。
私が現在担当しているのはセミナー参加受付画面です。

参加対象会員を一覧表示し、参加する人をチェックして、
チェックされた会員の参加受付処理を行います。

GridViewを使用して、会員を3列で一覧表示しています。
レイアウトは
CheckBox、会員番号、氏名、CheckBox、会員番号、氏名、CheckBox、会員番号、氏名
になっています。

CheckBoxの列はTemplateFieldになっていて、
チェックボックスの他にラベルを配置しています。
ラベルはデフォルトでは非表示です。

一覧表示する際、既に受付済みの人はチェックボックスが非表示になり、
★マークでラベルを表示しています。

会員数は表示する団体によって異なるのですが、団体によっては
1,000人程度の団体もあり、ページング機能を有効にしています。

そこで壁にぶつかってしまったのですが、
違うページに遷移した場合、遷移前のページのチェック状態を保持する方法はないでしょうか?

GridViewで再読み込みを行わずに表示ページを切り換える
http://codezine.jp/a/article.aspx?aid=564

という情報もみつけたのですが、この方法だとTemplateFieldは使えないらしいので
今回はあてはまりませんよね・・・。

ページ遷移時に、チェックされた会員番号を配列で保存しておく事も考えたのですが、
一旦チェックして、ページ遷移した後、また同じページに戻ってきて、
チェックを外した場合、どうしたらよいか思いつきませんでした・・・。

このような処理を行いたい場合、みなさんはどうされますか?
みなさんのお知恵をお貸し頂けると嬉しいです。
何卒よろしくお願い致します。


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-04-04 11:40 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-04-04 11:52
引用:

reikoさんの書き込み (2007-04-04 11:39) より:

ページ遷移時に、チェックされた会員番号を配列で保存しておく事も考えたのですが、
一旦チェックして、ページ遷移した後、また同じページに戻ってきて、
チェックを外した場合、どうしたらよいか思いつきませんでした・・・。


チェックを外されたら保存してある配列からその要素を削除すれば良いのではないでしょうか?
あれ?なんか変な事言ってる?(汗
_________________
かるあ のメモスニペット
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-04-04 12:02
引用:

かるあさんの書き込み (2007-04-04 11:52) より:

チェックを外されたら保存してある配列からその要素を削除すれば良いのではないでしょうか?




かるあさん、早速のご回答有難うございます。
それは、チェックボックスがチェックされるたびにページを再読み込みする
イメージでよろしいのでしょうか?

ボタン押下時とか、ページ遷移時とかのタイミングで
一気に処理しようとするからいけないんですかね・・・。
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-04-04 14:07
すみません、私の勘違いでした。
ページ遷移時や、登録ボタン押下時に、チェックを外した会員の
会員番号が退避用変数に存在すれば削除するようにすれば大丈夫でした。
大変失礼しました。

かるあさん、有難うございました。
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-04-04 15:31
既に解決されたようですが、気になったことがあります。

会員番号の配列にチェックされた会員番号を退避しているということは、
ページ表示時にGridViewの項目の数だけループして、
チェックボックスに値をセットしているということでしょうか?

それよりも、GridViewにバインドしているデータソースにCheckBox用の項目を用意して、
TemplateField内で、

コード:
<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server"
            Checked='<%# Eval("選択") %>' />
    </ItemTemplate>
</asp:TemplateField>


のように、Checkedプロパティにバインドしてやった方が、
余分な処理がいらなくなるので良いように思います。

また、「★」ラベルの表示、非表示を行うには「どっとねっとふぁんblog」の
http://dotnetfan.org/blogs/dotnetfanblog/articles/692.aspx
のエントリで似たようなことをやっているようですので、
参考にしてみてはいかがでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)