ASP.NET真假分页—真分页

8/10/2015来源:ASP.NET技巧人气:1298

asp.net真假分页—真分页

当数据量过大,有几万甚至十几万条数据时,每次都从数据库中取出所有数据就会降低查询效率,系统运行慢,还有可能卡死,这时假分页就会显得很不人性化,因此有了真分页的必要性。

正如上篇博文总结归纳,“真”相对于“假”存在,即不藕断丝连,从根部彻底断开,在此处表现为根据查询条件,只从数据库中提取出需要的部分,适合于大数据。而真分页的实现要借助于第三方控件AspNetPager。

AspNetPager控件是一个基于.net的第三方免费开源控件,具有开发高效、使用方便、功能完整等优点。它弥补了GridView内置分页以及PageDatasource类辅助分页的不足,将分页数据逻辑和页面UI分离开来,非常有利于SQL分页的实现。

首先需要下载AspNetPager控件:http://www.webdiyer.com/downloads/

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084908143.png

在VS中引用AspNetPager控件,欢迎参考博文《VS添加Ajax》中添加选择项部分(有图有真相),此处不再赘述:http://blog.csdn.net/u010773667/article/details/38518461

首先在web窗体中拖放一个gridview控件用来显示数据,选中AspNetPager控件拖拽到web窗体相应位置用来进行分页设置。显示如下:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084908147.png

对分页提示信息进一步改进。选中spNetPager控件,在右下角将会显现一个小按钮,单击打开,对导航按钮显示文本进行设置

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084908148.png

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084908149.png

改进效果:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084909150.png

对页索引文本或下拉框进行设置

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084909151.png

改进效果见下图:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084909152.png

如果还想显示的更加具体,可进行自定义信息区显示方式及内容设置

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084909153.png

上述对控件进行的所有设置将在VS中自动生成相应代码,so我们也可以通过手动输入代码进行设置。

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20140827/20140827084909154.png

好了,设置好了前台,接下来就要进行数据绑定了

?
1234567891011121314151617181920212223242526272829303132PRotected void Page_Load(object sender, EventArgs e){ if (!Page .IsPostBack ){string caid = Request.QueryString[caid];DataTable dt = new NewsManager().SelectAllNewsByCaId(caid); anpCa.AlwaysShow = true;anpCa.PageSize = 5;anpCa.RecordCount = dt.Rows.Count;int startIndex = anpCa.PageSize * 0;int endIndex = anpCa.PageSize * 1; gvDataBind(caid, startIndex, endIndex); }} private void gvDataBind(string caid,int startIndex,int endIndex){ DataTable dt = new NewsManager().SelectPartNewsByCaId(caid, startIndex, endIndex);if (dt.Rows.Count != 0){lblCategory.Text = dt.Rows[0][name].ToString(); //使类别标题显示相应的类别名称}gvNew.DataSource = dt;gvNew.DataBind();}protected void anpCa_PageChanged(object sender, EventArgs e){string caid = 6;int startIndex = anpCa.PageSize * (anpCa.CurrentPageIndex - 1)+1;int endIndex = anpCa.PageSize * (anpCa.CurrentPageIndex);gvDataBind(caid, startIndex, endIndex);}}

在D层数据查询的部分代码展示

#region 根据类别ID取出该类别下的所有新闻的分页显示        ///         /// 根据类别ID取出该类别下的所有新闻        ///         ///类别ID        ///         public DataTable SelectPartNewsByCaId(string caId,int startIndex, int endIndex)        {            DataTable dt = new DataTable();            SqlParameter[] paras = new SqlParameter[]{           new SqlParameter (@caId,caId ),           new SqlParameter (@startIndex,startIndex ),           new SqlParameter (@endIndex,endIndex )    };            dt = sqlhelper.ExecuteQuery(dbo.category_showpage, paras, CommandType.StoredProcedure);            return dt;        }        #endregion存储过程(很重要)
?