使用DataPager而不检索每个请求上的所有行

时间:2009-01-09 20:54:59

标签: asp.net pagination

我有一个ListView,我将数据绑定到这样的对象集合:

int total;
List<Client> clientList = 
    clientData.GetClients(criteria, pageNum, pageSize, out total);
uxClientList.DataSource = clientList;
uxClientList.DataBind();

其中pageNum,pageSize和total参数有助于在数据访问层进行分页。到目前为止一切都很好。

现在我可以在页面上抛出一个DataPager,将它指向ListView并获得一个不错的分页UX。 There's a little more to it when you're binding programmatically instead of declaratively with a data source control,但问题在于DataPager期望每次检索整个结果集,从中计算分页,因此它将结果的单页返回为总可用记录并呈现为如果只有一页结果可用。换句话说,如果我们切换到GetClients的非分页版本,上面的场景适用于DataPager:

List<Client> clientList = clientData.GetClients(criteria);
uxClientList.DataSource = clientList;
uxClientList.DataBind();

显然,由于我们的数据访问层足以为我们提供一次检索页面的方法,因此最好每次检索所有记录。如果我们能够明确告知DataPager总可用记录,那么它仍然可以自动创建分页输出,但一次只需要一个页面。

我没有找到一种简单的方法来做到这一点,我没有在搜索中发现任何东西。诚然,我目前对DataPager的实现没有深刻的理解,所以希望我忽视了一些事情。

2 个答案:

答案 0 :(得分:4)

看一下ListViewPagedDataSource及其AllowServerPaging属性,我认为可能是您正在寻找的东西..

答案 1 :(得分:2)

你没有忽视任何事情。

处理大型结果集时,您需要关闭分页并添加自己的分页控件。

根据我的经验&lt;&lt; &LT; &GT; &GT;&GT;满足。无论如何,没有人超过第3页。