- PR -

DataGridのPagerについて

1
投稿者投稿内容
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2005-09-26 17:12
いつもお世話になっております。

掲題の件について質問させてください。

現在、
--------------------------------------------------
DataGrid_A.AllowPaging = true;
DataGrid_A.PageSize = 5;
DataGrid_A.PagerStyle.Mode = PagerMode.NumericPages;
DataGrid_A.PagerStyle.PageButtonCount = 10;
DataGrid_A.PagerStyle.PrevPageText = "<";
DataGrid_A.PagerStyle.NextPageText = ">";
DataGrid_A.PagerStyle.Position = PagerPosition.Top;
--------------------------------------------------
以上のように、DataGridのPagerStyleを設定しているのですが、
10ページ目以上に渡る際、「...」と、最後に表示されます。
これをクリックすると、11ページ目を開き、
ページャーのリンクボタンも11〜20に変わるのですが、
これらのリンクボタンを押すと、1〜10ページ目に戻ってしまいます。

リンクボタンの上にマウスを置いて、遷移先ページを見ると、
どうもページャーが1〜10の場合と同じように表示されているようなのですが、
このような現象を回避された経験のある方、また対処法をご存知な方がおりましたら、
ご教授願えないでしょうか?

宜しく御願いします。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-26 18:04
お世話になります。

DataGridのPageIndexChangedイベントを拾って、
e.NewPageIndexの値をみて、
バインドするDataSourceを適宜変更し、再バインドした
記憶があります…

もっとよい方法があるのかも知れませんが…。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-09-26 18:29
ViewStateが無効になっているとか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10281&forum=7

DataGridのポストバック時の問題の究極スレッド



[ メッセージ編集済み 編集者: todo 編集日時 2005-09-26 18:33 ]
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-26 18:47
お世話になります。

引用:

todoさんの書き込み (2005-09-26 18:29) より:
ViewStateが無効になっているとか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10281&forum=7

DataGridのポストバック時の問題の究極スレッド



[ メッセージ編集済み 編集者: todo 編集日時 2005-09-26 18:33 ]


なるほど…CurrentPageIndexですか。
勉強になりますm(*_ _)m
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2005-09-27 10:37
なおこさん、todoさん、お返事ありがとうございます。

EnableViewStateはtrueになっていました。
ただ、Page_Load()においてDataGridの再読み込みを行っているので、
今回はEnableViewStateはfalseにしたほうが良かったのかもしれません。

流れとしては、Page_Load()でDataGrid再読込みをし、PageIndexChangedを流れるのですが。
現在表示されているページを保持せず、e.NewPageIndexをそのままCurrentPageIndexに入れたのが間違いだったようです。

まだ解決には至っていませんが、現在表示されているページを保持する方向で作っていきたいと思います。

アドバイスありがとうございました。
また何かの折には宜しく御願いします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-09-27 13:57
引用:

artさんの書き込み (2005-09-27 10:37) より:
EnableViewStateはtrueになっていました。
ただ、Page_Load()においてDataGridの再読み込みを行っているので、
今回はEnableViewStateはfalseにしたほうが良かったのかもしれません。

流れとしては、Page_Load()でDataGrid再読込みをし、PageIndexChangedを流れるのですが。
現在表示されているページを保持せず、e.NewPageIndexをそのままCurrentPageIndexに入れたのが間違いだったようです。


e.NewPageIndexをそのままCurrentPageIndexに入れるのは、全然間違いじゃないと思うんですが、なぜ間違いだと思ったのでしょう?
引用:

まだ解決には至っていませんが、現在表示されているページを保持する方向で作っていきたいと思います。


やりたいのは「ページ移動」なんですから、重要なのは「現在表示されているページ」じゃなくて、「移動先のページ」ですよね?todoさんのリンク先にこう書いてます。
引用:

「ポストバックイベント発生時、Page_Load() においてリバインド処理を行いますとDataGrid の再構築が行われたとみなされ、それまでのイベントが破棄されます」
だそうです。

よって以下の2項目を修正し、問題なく実行することが出来ました。
1. DataGrid の EnableViewState プロパティを True にする
2. Page_Load() 内で Not IsPostBackの場合のみ、DataBindを行う


この通りにして、IsPostBackの時はPageIndexChangedでリバインド処理を行うようにすれば解決するんでは?
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2005-09-27 18:05
ぼのぼのさん、レスありがとうございます。

書いた時はなぜかそのように思い込んでしまいました・・・
検索条件を変更して、再表示させる際、CurrentPageIndexを一度0に設定しないと、
途中で落ちていたので、CurrentPageIndexを0にしていたのですが、
CurrentPageIndexが0のままPageIndexChangedに流れていく点が問題でした。

PageIndexChangedに流れる前(Page_Load()の最後)で、
CurrentPageIndexの値を元に戻すことで無事解決いたしました。
(ページ最大数が保持したCurrentPageIndexよりも大きい場合のみ)

ご協力くださった皆様、ありがとうございました。
1

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