分享一个更好用的分页控件——QuickPager asp.net2.0 分页控件(总体介绍。这个控件都能做什么呢?up有分)
QuickPager分页控件的特点
1、两种运行方式:自动运行、手动运行。前者便捷,后者灵活。
2、多种分页方式:Postback、Postback伪URL、URL、URL重写、Ajax For服务器控件伪URL。
3、多种分页算法:Max、颠倒Top(优化版)、Row_Number、自动适应等。可以应对多种数据库和各种需求。
4、支持多种数据显示控件:GridView、DataList、Repeater等控件。有DataSource和DataBind()的控件都支持。
5、不需要存储过程,但是仍然可以保证高效率!
6、分页方式、分页算法、显示数据控件,都可以通过属性来“一键”切换。
7、URL分页方式里支持直接提取记录集,目前支持DataTable和WebList2(一个固定的实体类)。
8、Postback分页方式,支持直接通过URL参数(?page=3)访问指定页号(比如第3页)的记录。
9、URL分页方式,支持自定义URL参数,直接添加即可,不用设置属性。
10、生成SQL的类库(QuickPagerSQL)。
11、自动运行方式里,可以通过实现接口的方式更换其他的“数据访问类库”。
详细介绍和在线演示地址
运行方式——自动运行
这个就好比自动洗衣机,放好衣物、洗衣粉,做好选项,然后启动洗衣机。洗衣机就会自动按照步骤来洗衣服了,我们可以忙其他的事情了。很方便和节省时间。
QuickPager分页控件的自动运行方式也是一样,设置好属性就可以了,数据提取、数据绑定、回发事件处理,都可以不用去管。非常便捷,这个在一起也介绍过了。
QuickPager分页控件也设置了两个事件,在控件绑定前和绑定后触发,以方便我们实现一些特殊需求。如果只是一般的分页的话,那么就不用去管这两个事件了。
在线演示:http://demo.naturefw.com/Nonline/QuickPager/PostBack/Synthesis.aspx
运行方式——手动运行
自动运行方式很方便,但是也失去了一些灵活性,而且给人一种“高耦合”、违反单一职责的感觉。这个确实是确定。
那么怎么办呢?我们可以选择“手动运行”。这种方式下,分页控件只负责页面的显示(上一页、下一页、页号导航、记录数、页数等)和事件的触发(还有其他的一些,比如URL的参数处理等)。其他的功能都可以按照您喜欢的方式来处理。比如如何提取数据,提取哪里的数据,如何绑定等等。这样就增加了QuickPager分页控件的灵活性。
在线演示:http://demo.naturefw.com/Nonline/QuickPager/Customer/URL01.aspx
分页方式——Postback
这个适合后台管理类的项目,比如网站后台管理、OA、CRM等。一个最大的优点就是可以很方便的保留用的输入的查询条件。
支持直接获取指定页号的记录。
可能您认为使用postback分页,第一次访问只能看到第一页的数据,想在第一次访问就看到其他页的数据就实现不了的。这是个误区,其实是可以实现的,只是QuickPager是可以实现的。通过list.aspx?page=3 这样的连接,就可以看到第三页的记录。当然进入后还是可以正常翻页,看其他的页面。
在线演示:http://demo.naturefw.com/Nonline/QuickPager/PostBack/Simpleness.aspx
分页方式——Postback伪URL
如果在网页里面使用Postback来分页的话,那么对于搜索引擎就很不友好了。那么怎么办呢?除了可以采用URL的方式来分页之外,还可以用这种伪URL的分页方式。
我们可以对比一下两个连接方式。
Postback的连接:
<a href="javascript:__doPostBack('Pager1',2)">下一页</a>
<a href="PsotURL.aspx?page=7" onclick="javascript:__doPostBack('Pager1',7);return false;">下一页</a>
当然,这个也不是很好的方案,只是一个比较应付的,暂时顶一会的方法。
在线演示:http://demo.naturefw.com/Nonline/QuickPager/ajax/Postback.aspx
分页方式 —— 一键切换
这么多的分页方式,看起来有点乱,其实是很方便管理的。可以通过修改PagerTurnKind属性来切换分页方式,其他属性的设置都是一样的。
分页算法:
分页算法,就是提取分页数据用的SQL。因为一些数据库不能通过一条简单的SQL来获取指定页号的记录,所以需要一些小技巧。我习惯上把这种SQL就叫做分页算法了。也不知道这种叫法是否正确。
分页算法是通过属性设置,在运行是动态拼接出来的。不需要存储过程。有多种分页算法可供选择,多种分页算法可以支持不同的数据库和不同的需求。比如如果是SQL Server2005,那么就可以选择Row_number的分页算法,SQL Server2000就不能选择这个算法了。MySQL可以选择limit,只是其他数据库就不支持了。提供了 多种算法就可以应对不同的数据库了。
Max:
这个比较常见了,优点是写起来比较简单,缺点是子能单字段排序,不能多字段排序。
颠倒Top(优化版):
颠倒Top,虽然写起来比较复杂,但是效率并不是像想象中的那么差,他的优点是支持多字段排序,效率也不错。而且QuickPager采用的颠倒Top还做了优化,效率更佳。同时修改了一个bug,即显示最后一页多记录的情况。
Row_Number:
这个是针对SQL Server2005的,不多说了。
自动适应:
Max只能是单字段排序,颠倒Top支持多字段排序,但是如果单字段排序的话,就有点浪费了。如果一开始是单字段排序,后来变成了多字段排序,怎么办?自动适应就是解决这样的问题,设置后,会根据排序字段的数量来选择是Max还是颠倒Top。这样就更方便了。
分页算法 —— 一键切换
同上,只需要修改SetPagerSQLKind属性即可切换分页算法,其他的属性设置都是一样的。
分页算法的在线演示:http://demo.naturefw.com/Nonline/QuickPager/PagerSQL/PagerSQLPage.aspx
多种数据显示控件
后台管理里常见的就是GridView了,以前是DataGrid。前台网页里是Repeater和DataList。还有。Net2.0里的DetailsView、FormView也是支持的,理论上DropDownList、ListBox等也是支持的,只是似乎这些控件不需要分页。
在线演示:http://demo.naturefw.com/Nonline/QuickPager/Other/allControl.aspx
无需存储过程
一提到分页,您可能想到的是 存储过程,(其实是吴旗娃的那个分页控件吧)。可是大多数情况都是在存储过程里面拼接SQL来实现分页功能的,这样做存储过程的优势就一点都优势都体现不出来了。预编译、缓存执行计划这两个是存储过程的优势,但那是对在存储过程里面直接写SQL来说的。
所以与其在存储过程里面拼接SQL,不如写个类库来管理。QuickPagerSQL就是这样的类库。上面说的几种分页算法,他都可以根据属性,在运行时动态拼接出来。这样我们只需要关心表名/视图名、排序字段、查询条件等就可以了,至于什么样的分页算法,让QuickPagerSQL来生成就可以了。
URL分页里,可以直接获取DataTable,这样我们可以直接在页面里遍历DataTable了。当然如果你不喜欢可以不用的。我是比较喜欢这种方式的。
另外还可以直接获取一个实体类——WebList2。这个是我自定义的一个类,他是根据众多列表页面的特点而设计的。这里就先不详细说了,以后在细说。
一个接口
在自定运行方式下,会使用QuickPagerSQL来生成需要的SQL,然后通过DataAccessLibrary来提交给数据库。如果你不喜欢这个数据访问函数库,那么怎么办呢?您可以实现这个接口,换成你自己的数据访问方式。
有了这个接口,至少在理论上支持更换其他的数据访问类库了。
您可能会问了,QuickPagerSQL有没有接口?目前还没有设计这方面的接口,因为目前还没有发现有类似功能的类库,设计了也没得可换。当然也可能是我孤陋寡闻了。
整体在线演示:http://demo.naturefw.com/Nonline/QuickPager/default.aspx
源码下载:http://www.naturefw.com/down/List1.aspx
最后是给分原则,请大家注意看了。
1、认真看了之后,能够提出意见、建议、批评、bug等,10+分。
2、友情up ,1分。
[解决办法]
观摩学习中...最好能显示这样的效果123456789...1079 1080 1081 而不是:123456789......
[解决办法]
-1- [2] [3] [4] [5] [6] [7] [8] [9] [10]
[解决办法]
謝謝 。。。。。。。
[解决办法]
是最后三页,到中间不是有输入框里面输入500,然后go吗?
[解决办法]
能手动控制css样式吗?
[解决办法]
好帖啊。学习了,正需要用到分页的技术呢。多谢楼主了。
[解决办法]
用过jqgrid分页还可以。真正的无刷新吧。列宽可以拖东的
[解决办法]
看起来还不错
[解决办法]
看起来还不错
[解决办法]
新东西,来关注下,有时间试用一下。
[解决办法]
为什么是当前页了还是加连接的???
[解决办法]
辛苦楼主!支持下!
[解决办法]
观摩,学习下。。。
[解决办法]