数据分页在动态网站设计里是一门必须要掌握的技能,我们要将数据库里大量的数据有条理的显示在页面上,就必须要使用到数据分页,让显示到界面的数据是最有价值的数据。那么我通过下面的例子简单的介绍一下。
在进行介绍之前,首先要说的是分页的两种方式,一种是真分页,另一种是假分页。真分页也就是在界面根据要显示的数据页在数据库中查询相应的数据,并显示在页面上。而假分页是将数据库中的该内容的数据全部取出到页面,然后根据要显示的内容进行显示。两种方法各有优劣,让我们通过下面的例子分析一下。
在ASP.NET中,GridView控件有一个内置的分页功能,可支持基本的分页功能。在启用其分页机制前需要设置AllowPaging和Pagesize属性,AllowPaging决定是否启用分页功能,PageSize决定分页时每页显示几条记录(默认为12)。
//建立数据库连接 string strCon = "server=.;database=testAsp;uid=sa;pwd=1"; SqlConnection myConn = new SqlConnection(strCon); //打开数据库连接 myConn.Open(); //定义查询SQL语句 string sqlStr = "select * from login"; SqlCommand myCmd = new SqlCommand(sqlStr, myConn); //执行查询 SqlDataReader sdr = myCmd.ExecuteReader(); DataTable dt = new DataTable(); //填充数据到DataTable中 dt.Load(sdr); //绑定数据源 GridView1.DataSource = dt; GridView1.DataBind();
触发GridView控件的PageIndexChanging事件,在该事件中,设置当前页的索引值,并重新绑定GridView控件,从而实现GridView控件的分页功能。代码如下:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { GridView1.PageIndex = e.NewPageIndex; GridView1.DataBind(); }
效果如图所示:
这种分页就是假分页,将数据全部检索出来后根据选择重新绑定数据。
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { anp.RecordCount = 12; //控件显示页面总数,即共几页,这个可以从数据库中查询数据条数,根据每页显示数据,计算有多少页 int startindex = anp.StartRecordIndex; //获得当前的起始页 int endindex = anp.EndRecordIndex; //获得当前的截止页 SqlConnection myConn = GetConnection(); //连接数据库 myConn.Open(); //打开数据库连接 //将起始页和结束页传参到SQL查询语句中 SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@StartPage",startindex), new SqlParameter("@EndPage",endindex)}; //关键的数据库连接代码 string sqlStr = "with temptb1 as (select ROW_NUMBER() over (ORDER BY userName) as 行号,* from login)select * FROM temptb1 where 行号 between @StartPage and @EndPage"; SqlCommand myCmd = new SqlCommand(sqlStr, myConn); myCmd.Parameters.AddRange(paras); //执行查询 SqlDataReader sdr = myCmd.ExecuteReader(); DataTable dt = new DataTable(); //填充数据到DataTable dt.Load(sdr); //绑定数据源 GridView1.DataSource = dt; GridView1.DataBind(); } }
然后在控件的ASPNetPage1_PageChanged事件中添加代码如下:
protected void anp_PageChanged(object sender, EventArgs e) { //代码和上面相同,重新根据页面选择查询数据并绑定数据源 }
这种分页方式就是属于真分页了,因为查询出的数据就只有那么一页的数据。那么说到这里我们来看一下真分页和假分页的优缺点、
假分页:
在数据量比较小的时候,使用假分页的网站在执行分页显示数据时,会非常的简单和快速。但是我们知道,由于数据量非常大的时候,我们如果将数据库中的数据全部取出来,存放在内存中那么这个系统是无法使用的,会变得非常慢。而且其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等, 而且有时候我们需要对DataList和Repeater甚至自定义数据绑定控件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多.NET程序员最头疼的问题之一。
真分页:
由于我们是要什么取什么所以就克服了上一种方式的缺点,而且AspNetPage控件非常强大,AspNetPager针对.NET分页控件的不足,提出了与众不同的解决.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方, 如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等
总结:我们可以根据使用需求来使用合理的分页方式。