海妖 发表于 2015-1-16 22:31:11

ASP.NET网站制作之ASP.NET中使用DataGrid完成高效分页

我以前很喜欢Serv-U,自从它用Java重写之后我就再也没用过,实在是太慢了,我宁可用IIS搭建FTP,虽然IIS搭建FTP在权限管理上很不灵活。asp.net|datagrid|分页  ASP.Net中的DataGrid有内置分页功效,可是它的默许的分页体例效力是很低的,出格是在数据量很年夜的时分,用它内置的分页功效几近是不成能的事,由于它会把一切的数据从数据库读出来再举行分页,这类只拔取了一小部分而丢失落年夜部分的办法是不成往取的.
  
  在最进的一个项目中由于一个办理页面要办理的数据量十分年夜,以是必需分页显现,而且不克不及用DataGrid的内置分页功效,因而本人完成分页.上面先容一下我在项目顶用到的分页办法.
  
  固然显现控件仍是用DataGrid的,由于数据绑定很便利^_^.
  
  要包管不传输冗余的数据,那末必需在数据库中数据读取时完成分页,数据库的分页操纵能够放在存储过程当中.看了CSDN的一篇Blog中讲了一个百万级数据分页的存储历程的完成(http://blog.csdn.net/wellknow/posts/55167.aspx,他的这个办法能够依据分歧情形举行得当的优化),依据他的办法,这里完成一个复杂的SQL语句来完成这里分页必要的存储历程。
  
  createprocedureListProduct
  
  (
  
     @PageIndexint,--分页后必要页的序号
  
     @PageSizeint,--一页的巨细
  
     @ConditionSQLC查询前提的SQL语句
  
  )
  
  AS…详细代码就不写了(能够参考下面的链接).
  
  详细的SQL语句以下:
  
  SELECTTOP100*FROM(select*fromproductwhereproductid<200000)TWHERET.productidNOTIN
  
  (SELECTTOP900productidFROM(selectproductidfromproductwhereproductid<200000)T1ORDERBYT1.productidasc)ORDERBYproductidasc
  
  这条语句的从总的商品(30万)中掏出productid<200000(共20万),再按每页100的巨细分页,然后掏出第10页.
  
  PublicDataTableListProduct(intpageIndex,intpageSize)
  
  {
  
     //ADO.net从数据库中掏出数据的代码就略过^_^.
  
  }
  
  用下面的存储历程读出的数据在DataGrid内里分页,必需把DataGrid的AllowPaging和AllowCustomPaging设置为true
  
  protectedSystem.Web.UI.WebControls.DataGridProductGrid;
  
  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事务(处置用户新选中某页时的事务)
  
  privatevoidProductGrid_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse)
  
  {
  
    //假如在存储历程分页功效顶用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事务,假如不如许处置的话,大概会碰到一些意想不到的情形(假如你的确必要的话也能够下面这段代码,不外最好实践测试一下)。
  
  全部历程完成后,再次扫瞄页面,以为速率真是快多了据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。

小女巫 发表于 2015-1-19 16:05:24

如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。

小妖女 发表于 2015-1-19 16:05:24

逐步缩小出错代码段的范围,最终确定错误代码的位置。

只想知道 发表于 2015-1-24 16:50:36

最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。

海妖 发表于 2015-2-2 11:13:15

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

冷月葬花魂 发表于 2015-2-7 18:44:25

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

变相怪杰 发表于 2015-2-22 23:54:32

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

再见西城 发表于 2015-3-7 04:40:41

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

简单生活 发表于 2015-3-14 12:01:42

最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。

深爱那片海 发表于 2015-3-21 06:09:47

当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
页: [1]
查看完整版本: ASP.NET网站制作之ASP.NET中使用DataGrid完成高效分页