次のようなオブジェクトのコレクションにデータバインドしている ListView があります。
int total;
List<Client> clientList =
clientData.GetClients(criteria, pageNum, pageSize, out total);
uxClientList.DataSource = clientList;
uxClientList.DataBind();
pageNum、pageSize、および total パラメータは、データ アクセス層でのページングを容易にします。ここまでは順調ですね。
これで、ページに DataPager をスローし、それを ListView に向けて、まともなページング UX を得ることができます。データ ソース コントロールを使用して宣言的にではなくプログラムでバインドする場合は、もう少し作業が必要ですが、ここでの問題は、DataPager が結果セット全体が毎回取得されることを期待していることです。そこからページネーションを計算する必要があるため、結果の 1 ページが利用可能なレコードの合計として返され、利用可能な結果が 1 ページしかないかのようにレンダリングされます。つまり、GetClients の非ページング バージョンに切り替えると、上記のシナリオは DataPager で正常に機能します。
List<Client> clientList = clientData.GetClients(criteria);
uxClientList.DataSource = clientList;
uxClientList.DataBind();
明らかに、データ アクセス レイヤーは、一度に 1 ページを取得する方法を提供してくれるので、毎回すべてのレコードを取得するよりも、これが望ましいでしょう。使用可能なレコードの合計を DataPager に明示的に通知できれば、ページネーション出力を自動的に作成できますが、一度に 1 ページしか必要としません。
これを行う簡単な方法が見つからず、検索で何も見つかりませんでした。確かに、私は現在 DataPager の実装について深く理解しているわけではないので、見落としがあることを願っています。