承接上篇博文《ASP.NET真假分页-假分页》:http://blog.csdn.net/u010773667/article/details/38845009,继续解说ASP.NET真假分页之真分页。

真分页

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

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

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

首先须要下载AspNetPager控件,下载DLL文件:http://www.webdiyer.com/downloads

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

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

选中spNetPager控件。在右下角将会显现一个小button,单击打开,对导航button显示文本进行设置。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDc3MzY2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

执行后效果:

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDc3MzY2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

改进效果见下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDc3MzY2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

假设还想显示的更加详细,可进行自己定义信息区显示方式及内容设置

上述对控件进行的全部设置将在VS中自己主动生成对应代码,我们也能够通过手动输入代码进行设置,此处不介绍。

好了。设置好了前台。接下来就要进行数据绑定了(注意:在方法anpCa_PageChanged()中绑定了caid=6,此处须要又一次获得类别ID,我没有解决。。

希望会的朋友友情提示一下)

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!Page .IsPostBack )
  4. {
  5. string caid = Request.QueryString["caid"];
  6. DataTable dt = new NewsManager().SelectAllNewsByCaId(caid);
  7. anpCa.AlwaysShow = true;
  8. anpCa.PageSize = 5;
  9. anpCa.RecordCount = dt.Rows.Count;
  10. int startIndex = anpCa.PageSize * 0;
  11. int endIndex = anpCa.PageSize * 1;
  12. gvDataBind(caid, startIndex, endIndex);
  13. }
  14. }
  15. private void gvDataBind(string caid,int startIndex,int endIndex)
  16. {
  17. DataTable dt = new NewsManager().SelectPartNewsByCaId(caid, startIndex, endIndex);
  18. if (dt.Rows.Count != 0)
  19. {
  20. lblCategory.Text = dt.Rows[0]["name"].ToString(); //使类别标题显示对应的类别名称
  21. }
  22. gvNew.DataSource = dt;
  23. gvNew.DataBind();
  24. }
  25. protected void anpCa_PageChanged(object sender, EventArgs e)
  26. {
  27. string caid = "6";
  28. int startIndex = anpCa.PageSize * (anpCa.CurrentPageIndex - 1)+1;
  29. int endIndex = anpCa.PageSize * (anpCa.CurrentPageIndex);
  30. gvDataBind(caid, startIndex, endIndex);
  31. }
  32. }

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

  1. </pre></p><p></p><pre class="html" name="code">
  1. </pre><span style="font-family:华文楷体;font-size: 14pt;"></span><pre class="html" name="code">#region 依据类别ID取出该类别下的全部新闻的分页显示
  2. /// <summary>
  3. /// 依据类别ID取出该类别下的全部新闻
  4. /// </summary>
  5. /// <param name="caId">类别ID</param>
  6. /// <returns></returns>
  7. public DataTable SelectPartNewsByCaId(string caId,int startIndex, int endIndex)
  8. {
  9.  
  10. DataTable dt = new DataTable();
  11. SqlParameter[] paras = new SqlParameter[]
  12. {
  13. new SqlParameter ("@caId",caId ),
  14. new SqlParameter ("@startIndex",startIndex ),
  15. new SqlParameter ("@endIndex",endIndex )
  16. };
  17. dt = sqlhelper.ExecuteQuery("dbo.category_showpage", paras, CommandType.StoredProcedure);
  18. return dt;
  19. }
  20. #endregion

存储过程(非常重要)

  1. -- =============================================
  2. -- Author: 王英群
  3. -- Create date: 2014-8-10
  4. -- Description: 跟据类别ID取出该类别下的全部新闻的分页显示
  5. -- =============================================
  6. ALTER PROCEDURE [dbo].[category_showpage]
  7. @caid int,
  8. @startIndex int,
  9. @endIndex int
  10. AS
  11. BEGIN
  12. with temptable as (
  13. select ROW_NUMBER() over (order by id desc) as 行号, * from
  14. (
  15. select n.id,n.titile,n.createTime,c.[name],n.caId from news n
  16. inner join category c on n.caId =c.id and n.caId =@caid
  17. ) as aa
  18. )
  19.  
  20. select * from temptable where 行号 between @startIndex and @endIndex
  21.  
  22. END

执行后效果见下图:

注意:我的程序中多了一个參数(类别ID),在页索引动态变化的过程中须要一直又一次获得,这一点我没有实现,希望小伙伴们能够帮助我。谢谢!

结合上篇博文。假分页适合于数据量相对较小的情况下。而真分页适合于数据量大的情况下。真假分页的使使用,请阅读我们的负担。




ASP.NET分页正品—分页真的更多相关文章

  1. ASP利用Recordset实现分页

    <!--#INCLUDE FILE="../function/db.asp" --> <!--#INCLUDE FILE="../function/co ...

  2. ASP.NET MVC 数据分页

    作为一个菜鸟级的程序猿,总结一下学到的两种数据分页. 1.真分页 真分页就是需要时从数据库里读出需要多的数据,利用存储过程可实现.网上的分页SQL特别多,数据库自带的一些方法也可方便的帮助分页,但是我 ...

  3. 学习ASP.NET MVC(十一)——分页

    在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法.分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页.在今天这篇文章中,我们学习如果在MVC页面中使用PagedList. ...

  4. asp.net利用存储过程分页代码

    -最通用的分页存储过程 -- 获取指定页的数据 CREATE PROCEDURE Pagination ), -- 表名 ) = '*', -- 需要返回的列 )='', -- 排序的字段名 , -- ...

  5. ASP.NET MVC 简单分页代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. ASP.NET中刷新分页

    1,第一次全部把数据加载到内存中,然后再做分页,性能差,不推荐. 2,GridView自带分页 3,AspNetPager分页控件  这个是第三分控件需要下载,很好用 4,自己写分页 前三种就不介绍如 ...

  7. Asp 解析 XML并分页显示

    Asp 解析 XML并分页显示 Asp 解析 XML并分页显示,演示样例源代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  8. asp.net MVC通用分页组件 使用方便 通用性强

    asp.net MVC通用分页组件 使用方便 通用性强   该分页控件的显示逻辑: 1 当前页面反色突出显示,链接不可点击 2 第一页时首页链接不可点击 3 最后一页时尾页链接不可点击 4 当前页面左 ...

  9. Asp.net MVC 简单分页 自做简单分页

    Asp.net MVC 简单分页:   public static string Pager(int page,int pageSize,int total)         {           ...

随机推荐

  1. 新浪SAE数据库信息

    此账号仅能在SAE平台上使用,不能从外部连接我们建议开发者使用SaeMysql操作数据库 如果您想自己实现数据库相关操作,可以使用以下常量: 用户名  : SAE_MYSQL_USER 密 码 : S ...

  2. 传京东副总裁蒉莺春或将接管POP业务-搜狐IT

    传京东副总裁蒉莺春或将接管POP业务-搜狐IT 传京东副总裁蒉莺春或将接管POP业务

  3. eclipse3.1.1汉化版安装

    确认安装好jdk以后,下载eclipse3.1.1及多语言包eclipse3.1.1 下载地址   http://eclipse.areum.biz/downloads/drops/R-3.1.1-2 ...

  4. 飘逸的python - __new__、__init__、__call__傻傻分不清

    __new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是sel ...

  5. jQuery Fancybox插件说明

    这里有jquery影像回放路径插件称为Fancybox,项目主页地址:http://fancybox.net/ Fancybox的特点例如以下: 1.能够支持图片.html文本.flash动画.ifr ...

  6. SQL参数化查询的问题

    最近碰到个问题, SQL语句中的 "... like '%@strKeyword%'"这样写查不出结果, 非的写成 "... like '%" + strKey ...

  7. Smarty中模板eq相等 ne、neq不相等, gt大于, lt小于

    eq相等   ne.neq不相等,   gt大于, lt小于 gte.ge大于等于   lte.le 小于等于   not非   mod求模   is [not] div by是否能被某数整除   i ...

  8. 隐马尔科夫模型(HMM)及事实上现

    马尔科夫模型 马尔科夫模型是单重随机过程,是一个2元组:(S,A). 当中S是状态集合,A是状态转移矩阵. 仅仅用状态转移来描写叙述随机过程. 马尔科夫模型的2个如果 有限历史性如果:t+l时刻系统状 ...

  9. Hibernate4 : 持久化你的第一个类

    由于目前我在学校的一个实验室跟老师学习Java EE开发,老师用的是Seam框架接活做项目,所以这一系列的文章将会向Seam方向写..路线大致应该是 : JSP --> Servlet --&g ...

  10. Spring整合JMS-基于activeMQ实现(二)

    Spring整合JMS-基于activeMQ实现(二) 1.消息监听器      在Spring整合JMS的应用中我们在定义消息监听器的时候一共能够定义三种类型的消息监听器,各自是MessageLis ...