All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET技巧:远程抓取GOOGLE的自动翻译结果_[Asp.Net教程]
asp.net防止页面跳回顶部的方法_[Asp.Net教程]
ASP.NET,2.0移动开发之设备筛选器的应用_[Asp.Net教程]
使用Asp.Net2.0,编写类似GMail的文件上传系统_[Asp.Net教程]
asp.net,局域网存放文件_[Asp.Net教程]
php5.0升级5.2全过程_php资料_编程技术
ASP.NET,2.0中执行数据库操作命令之二_[Asp.Net教程]
HTML 初学者指南(5)_[Html教程]
HTML中小meta的大作用_[Html教程]
PHP加密文本文件并限制特定页面的存取_php资料_编程技术
Reading number is top 10 pictures
奇趣的世界记录1
Extremely rare TianShan Mountains snow lotus2
Magnificent cloud1
9.3阅兵全景图5-地空反舰导弹梯队
西游日记3
The beginning and end
再发一张清纯美眉的照片
More attractive than sora aoi4
The money of more than 100 countries and regions12
有种屌丝级别的好妹子
Download software ranking
SQL2000 For 4IN1
徐若瑄成名作“魔鬼天使”
C#编程思想
电脑知识及技巧大合集
Boxer Classic video3
Boxer's Top ten classic battle4
株洲本地在线棋牌游戏
JSP+Ajax Web development typical examples
Boxer vs Yellow1
The Bermuda triangle1
delv published in(发表于) 2014/1/6 9:02:27 Edit(编辑)
ASP.NET中利用DataGrid实现高效分页_[Asp.Net教程]

ASP.NET中利用DataGrid实现高效分页_[Asp.Net教程]

ASP.NET中利用DataGrid实现高效分页_[Asp.Net教程]

ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的.
  
  在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页方法.
  
  当然显示控件还是用DataGrid的, 因为数据绑定很方便^_^.
  
  要保证不传输冗余的数据,那么必须在数据库中数据读取时实现分页, 数据库的分页操作可以放在存储过程中. 看了CSDN的一篇Blog中讲了一个百万级数据分页的存储过程的实现(http://blog.csdn.net/wellknow/posts/55167.aspx,他的这个方法可以根据不同情况进行适当的优化), 根据他的方法,这里实现一个简单的SQL语句来实现这里分页需要的存储过程。
  
  create procedure ListProduct
  
  (
  
      @PageIndex int, -- 分页后需要页的序号
  
      @PageSize int, -- 一页的大小
  
      @ConditionSQL – 查询条件的SQL语句
  
  )
  
   AS … 具体代码就不写了(可以参考上面的链接).
  
  具体的SQL语句如下:
  
  SELECT TOP 100 * FROM (select * from product where productid<200000) T WHERE T.productid NOT IN
  
  (SELECT TOP 900 productid FROM (select productid from product where productid<200000) T1 ORDER BY T1.productid asc) ORDER BY productid asc
  
  这条语句的 从总的商品(30万)中取出productid<200000(共20万),再按每页100的大小分页,然后取出第10页.
  
  Public DataTable ListProduct(int pageIndex, int pageSize)
  
  {
  
      //ADO.net从数据库中取出数据的代码就略过^_^.
  
  }
  
  用上面的存储过程读出的数据在DataGrid里面分页, 必须把DataGrid的AllowPaging和AllowCustomPaging设置为true
  
  protected System.Web.UI.WebControls.DataGrid ProductGrid;
  
  ProductGrid.AllowPaging = true;
  
  ProductGrid.AllowCustomPaging = true;
  
  然后在设置要显示的一页的大小
  
  ProductGrid.PageSize = 100; // 在显示的时候依据实际的数据显示。
  
  设置一页大小后,如果要让DataGrid实际分出页数来,还必须设置
  
  ProductGrid.VirtualItemCount = GetProductCount() ; // GetProductCount() 的功能是获取满足条件的产品数目, 这里的条件就是productid<200000. 设置这项属性后,那么这个DataGrid的页数就是
  
  VirtualItemCount/PageSize, 也就是PageCount的值. 不能对PageCount直接赋值,因为他是只读的属性.
  
  这些属性设置好后再绑定数据:
  
  ProductGrid.DataSource = ListProduct(1, ProductGrid.PageSize); // 在Page_Load里面 pageIndex为1,记住判断IsPostBack,在IsPostBack为false时执行这些代码
  
  ProductGrid.DataBind();
  
  这样数据绑定后就可以看到具有分页模样的页面了.但是还不能真正的分页.要实现真正的分页,还必须实现下面的功能.
  
  处理DataGrid的PageIndexChanged事件(处理用户新选中某页时的事件)
  
  private void ProductGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
  
  {
  
     // 如果在存储过程分页功能中用1表示第一页的序号的话那么这里必须用e.NewPageIndex+1作为pageIndex(如果选择了DataGrid上页号为3的页,那么e.NewPageIndex就为2), 否则的话直接用e.NewPageIndex就可以了
  
     ProductGrid.DataSource = ListProduct(e.NewPageIndex+1, ProductGrid.PageSize); // 从数据库中读取新的数据
  
     ProductGrid.DataBind();
  
     // 设置当前的Page序号值, 如果不设置的话它是不会变得, 这样会给用户造成误解,以为所有页的数据相同。
  
     ProductGrid.CurrentPageIndex =e.NewPageIndex;
  
  }
  
  如果你处理了DataGrid的ItemCommand的事件的话,必须在ItemCommand事件处理代码前面加上这些代码:
  
  if (e.Item.ItemType == ListItemType.Pager)
  
  {
  
     return;
  
  }
  
  因为当PageIndexChanged事件激发,也就是用户选则了另外一页时会先激发ItemCommand事件,如果不这样处理的话,可能会遇到一些意想不到的情况(如果你确实需要的话也可以上面这段代码,不过最好实际测试一下)。
  
  整个过程完成后,再次浏览页面,觉得速度真是快多了





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.