【问题标题】:How does paging work in asp.net?分页在 asp.net 中是如何工作的?
【发布时间】:2011-04-02 14:46:22
【问题描述】:
我很想知道在 asp.net 中分页是如何工作的?
如果我的查询返回 500 条记录,并且我的 gridview 分页限制为每页 25 条记录,那么当 gridview 加载时,记录集返回 25 条记录还是 500 条记录?
如果记录集返回 25 条记录,ado 如何与 SQL 通信以返回第二页的记录?
如果记录集返回 500 条记录,它们是否缓存在客户端?
【问题讨论】:
标签:
asp.net
.net-3.5
gridview
paging
【解决方案1】:
来自MSDN:
GridView 控件将执行
通过获取所有数据进行分页
来自源的记录,显示
只有当前页面的记录,
并丢弃其余的。
所以答案是,它并没有真正进行有效的“分页”,就像 Web 表单的许多方面一样,它都被抽象掉了。这并不是真正的“SELECT TOP 10”。
它只是忽略了它不需要的记录-但数据库调用仍然是“SELECT *”。
这就是为什么很多人(包括我自己)更喜欢使用 LINQ 编写自定义但简单的分页,使用 Skip 和 Take IEnumerable 扩展方法。
例如
yourDbContext.Where(s => somePredicate).Skip((pageNum - 1) * pageSize).Take(pageSize);
【解决方案2】:
您可能希望通过 javascript 依赖客户端分页方法。 jqGrid 是一个优秀的基于 jQuery 的解决方案。当然,这意味着您必须在页面上加载整个数据。否则,您需要编写存储过程以从特定页面返回数据。但在这种情况下,您必须实现自己的分页技术。您创建的此类存储过程必须始终返回两个结果集。一个返回实际数据,另一个返回基本分页信息的结果集,如记录总数、总页数和当前页。