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