分页,不错,确实如此。
但是分页,如何分页呢?
上篇博客中提到GridView控件,确实它很智能,有个自动分页功能,可以把查询出来的数据,以分页的形式展现给用户。
注意:是把查询出来的所有数据,然后以分页的形式展现给用户。貌似它确实以第一页,第二页显示……,但是,前提确实早已经把所有的数据查询出来。此时的分页只是一个形式而已,称之为假分页。
但是每个事物都有他自己独特的一面,不能因其缺点而否定其全部哈。
这种办法可以适合于少量数据,一页显示不全,可以使用控件的分页来完美展示的。
但是对于大量的数据,这种假分页,则在显示给用户时,性能下降 。所以对于大量数据,还是选择真分页,所谓的真分页,就是数据库中分页,选择第几页到第几页,然后就可以显示你选择的,所以每次查询显示的则是最多十几条数据而已。
在此使用Aspnetpager控件来讲述真分页。。
对于Aspnetpager,这个控件,如何加载以及加载过程中可能会出现的问题,在上篇博客中已经讲述,在此直接介绍其用法。
真分页的原理:选择数据库中第几条到第几条的数据。
那如何确定第几条到第几条?使用数据库中的行号来确定。
对于此行号而言,若是删除一条记录,则行号会逐步代替,一直是一个顺序的序列。
那如何获取行号呢?使用
select ROW_NUMBER () over(order by courseNo) as 行号,* from courseInfo
courseNo:代表主键。
但是此函数只有sqlserver2005以及以上的版本才具有,而sqlserver2000没有哈。
行号是获得了,那么第几条到几条如何实现呢?代码中如何传参呢?别忘了Aspnetpager控件。
此控件的使用:首先应该设置RecordCount属性(一共多少条数据),然后设置属性PageSize(每页显示的数据)。然后传的参数是Aspnetpager的属性StartRecordIndex,EndRecordIndex。
举个具体的例子:
使用分页的查询存储过程:
ALTER proc [dbo].[proc_SelectByPropertyAndCollegePaging] @collegeNo varchar(50), @property varchar(50), @beginSize int, @endSize int as begin with temp as ( select ROW_NUMBER () over(order by courseNo) as 行号,* from courseInfo where collegeNo =@collegeNo and courseProperty =@property and IsEffective='是' ) select * from temp where 行号 between @beginSize and @endSize end
不含分页的查询存储过程:
ALTER proc [dbo].[proc_SelectByPropertyAndCollege] @collegeNo varchar(50), @property varchar(50) as begin select * from courseInfo where collegeNo =@collegeNo and courseProperty =@property and IsEffective='是' end
界面pageLoad事件:
if (!Page.IsPostBack) { //给aspnetpage赋值 AspNetPager1.RecordCount = new SelectCourseManager().SelectByCollegeAndProperty(ddlCourseProperty.SelectedValue, ddlCollege.SelectedValue).Rows.Count; //显示查询到的课程信息 BindCourse(); }
protected void AspNetPager1_PageChanged(object sender, EventArgs e) { //重新绑定 BindCourse(); }
此例子使用的分层的模式实现的,此代码只显示了界面上的代码,存储过程中的查询方法,已经给出,其中的SelectByCollegeAndProperty 方法(是BLL层),用重载实现,一个含有分页,另一个不含分页。对于DAL层,也是用重载使用,在此不再贴出。
当然此控件可以设置样式,可以更改其样式,上图中控件的样式是拍拍网样式。分页实际是数据库分页,上述的分页存储过程体现这点,但是向用户展示分页,则是借助Aspnetpager·控件。。其中最重要的是其RecordCount和PageSize、以及StartRecordIndex,EndRecordIndex。