【问题标题】:Using DataPager without retrieving all rows on each request使用 DataPager 而不检索每个请求的所有行
【发布时间】:2009-01-09 20:54:58
【问题描述】:

我有一个 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 的实现没有深入的了解,所以希望我忽略了一些东西。

【问题讨论】:

    标签: asp.net pagination


    【解决方案1】:

    查看 ListViewPagedDataSource 及其 AllowServerPaging 属性,我认为可能正是您要查找的内容..

    【讨论】:

    • 非常有趣...关于该属性的稀疏文档似乎暗示了这一点。我一有时间就玩它。
    • 当我写 MyListView.AllowServerPaging 它不被识别为属性
    【解决方案2】:

    你没有忽略任何事情。

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

    根据我的经验 >> 就足够了。反正没有人越过第三页。

    【讨论】:

    • 说得好...我确实喜欢 Stackoverflow 上的数字分页 :-) 那说我确实做了一个非常简单的数字寻呼机...我只是喜欢 DataPager 的一些花里胡哨.一切顺利。
    • 我敲了一个stackoverflow风格的数据分页器,如果你有兴趣会发布代码(虽然它不做服务器分页)
    • 希望看到 Stackoverflow 样式寻呼机的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多