SQLServer2005中的分页、排序和筛选
本文关键字:排序 筛选 分页 SQLServer2005 | 更新日期: 2023-09-27 18:29:05
有人能给我解释一下自定义分页、过滤和排序吗。虽然我在网上搜索过这些东西,但所有这些方式都很难理解。任何主体都有更好的方法在单个查询中进行分页、筛选和排序吗。以及我如何能够在一个查询中完成所有这些事情事实上,我已经使用forloop创建了一个网格。那么,我该如何自定义分页和过滤呢。我已经检查了登录信息,但我不明白。许多联机分页示例中都使用了行号。有人能解释一下吗。抱歉我英语不好。请尽快帮我。非常感谢。
我发现网格是显示大量数据的最简单方法。您可以尝试在谷歌上搜索asp:GridView的示例。网格自动为您添加的基本功能(当您启用分页时)是:
- 上一页、下一页以及用于在页面之间移动的类似按钮
- 最大页面/项目计数
- 当前页面
一个重要的非分页:
- 客户端分页:一次加载所有数据,但仅显示10/15/20/。。。项
- 服务器端分页:只加载您正在查看的页面(因此每次转到不同的页面时都需要调用数据库)
通常,客户端分页是"默认"。给你的网格一个列表,设置每页你想看到的项目数量,你就完成了。这对于小桌子(几十个项目)来说已经足够好了,但如果缩放效果很差的话。如果你的表中有一百万个项目,它会在显示任何内容之前尝试(很可能失败)加载所有项目。
您可以对显示的项目数量进行严格限制,但处理大型表的最佳方式是服务器端分页。为此,需要进行一些定制。这里是需要您提到的"行号"的地方(服务器端分页示例)。有一个行号可以获取一个"页面"。示例:
- 页码:5
- 总计(记录数):100
- PageSize(每页显示的记录数):10
如果你想要第5页的记录,你需要以某种方式对列表进行排序,然后将记录41到50显示第5页中的内容。在查询中,这可以使用ROWNUMBER BETWEEN ((Page - 1) * PageSize) + 1 AND Page * PageSize
来完成。在实体框架中,您可以使用.Skip((Page - 1) * PageSize).Take(PageSize)
来获得相同的结果。
注意:在上述示例中,假设分页从1开始(第一页=第1页)。