2011年04月20日

ListViewのページングの問題点。ページ位置を初期化(リセット)させるには

ASP.NET 3.5から採用されたListViewコントロールにページング機能を付ける場合、DataPagerというコントロールを使う。
これは便利なのだが、一つ困ったことに、データ表示する条件を変えて再表示させると前回のページ位置を保持して先頭ページから表示しないというバグ(?)がある。
具体的に言えば、条件無しで全30件のデータを1ページ10件で表示したとする。
2ページ目に移動した後、条件を変えて検索し結果が13件あったとすると、2ページ目の3件を表示してしまう。先頭から表示するのが普通だと思うがそうならない。
そこで、検索時にDataPagerをリセットさせて先頭ページから表示させようと思うのだが、
これが結構難題だった。プロパティで簡単にできるかと思ったのだが、そのようなプロパティは無く、結局内部でイベントを発生させて先頭に移動させる方法が必要だった。

参考にした海外のサイト:http://leedumond.com/blog/resetting-the-page-index-in-a-listview/

ページ移動する場合は、DataPagerのOnPagerCommandメソッドで指定されたイベントで先頭ページ(NewStartRowIndex)を指定するが、再検索時にこのイベントを強制的に発動させる必要がある。

'- 1ページ目から表示させる処理 --
Private Sub PagerReset()
Dim dp As DataPager = ListView1.FindControl("pager")
If Not dp Is Nothing Then
'リセット用もしくは先頭ページへのコマンドを指定
Dim cmdEventArgs As CommandEventArgs = New CommandEventArgs("Reset", "")
Dim tempPagerField As TemplatePagerField = dp.Fields(0)
If Not tempPagerField Is Nothing Then
'ここでPagerCommandのイベントが処理される
tempPagerField.HandleEvent(cmdEventArgs)
End If
End If
End Sub
posted by なっちゃん at 15:33| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。