快速业务通道

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
ASP.NET 1
       2
       3 <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"
       SelectMethod="GetProductsPaged" TypeName="ProductsBLL" EnablePaging="True" SelectCountMethod="TotalNumberOfProducts">
       </asp:ObjectDataSource>

注意 EnablePaging和SelectCountMethod属性已经被设置了,<asp:Parameter>被 移除了.图16是属性窗口.

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

图16: 使用自定义分页配置,ObjectDataSource

完成这些后,浏 览页面.你会看到10条product按照字母排序被列出来了.每次翻一页看看.对用户 来说现在还看不出来什么差别,因为自定义分页在大数据量的情况下效率才能显示 出来.

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

图17: 根据Product的 Name排序的数据的自定义分页

注意:自定 义分页时,ObjectDataSource的SelectCountMethod方法返回的page count值存在 GridView的view state里.其它变量 –PageIndex,EditIndex,SelectedIndex,DataKeys集合等–都存在 control state里.control state和GridView的EnableViewState属性无关.由于 PageCount的值在postback期间存在viewstate里,当你的页面上有链到上一页的 link时,你需要开启GridView的view state(如果没有这个link,你可以禁用view state).

点上一页link会引起postback,GridView会更新PageIndex属 性.GridView会给PageIndex赋一个小于PageCount的值.如果禁用了view state,PageCount的值在postback时会丢失,PageIndex会被赋一个最大的整型值. 然后GridView在根据PageSize乘PageCount来计算starting row index时会发生 OverflowException异常.

执行自定义分页和排序目前我们自定义分页

bjectDataSource的 StartRowIndexParameterName 和MaximumRowsParameterName 属性– StartRowIndexParameterName 和MaximumRowsParameterName 属性是传给 SelecMethod用来自定义分页的输入参数. 默认的参数名为startIndexRow and MaximumRows, 这就是在创建BLL里的GetProductsPaged方法时用这些给参数命名 的原因. 如果你使用了其它的参数名字–比如startIndex和maxRows– 你将不得不相应的设置ObjectDataSource的StartRowIndexParameterName和 MaximumRowsParameterName(startIndex和maxRows).

设置 ObjectDataSource的 SelectCountMethod Property 为返回分页记录总数的方法 的名字(TotalNumberOfProducts)–调用ProductsBLL类的 TotalNumberOfProducts方法返回总的记录数 . ObjectDataSource 需要这个信息 来正确的显示页面. 

从ObjectDataSource的声明里移除startRowIndex and maximumRows <asp:Parameter> 元素的标记–当通过向导配置 ObjectDataSource 时, Visual Studio 自动为GetProductsPaged方法的参数增加 了两个<asp:Parameter> 元素. 设置EnablePaging 为true后, 这些参数会 被自动传递;如果在声明代码里保留它们,那么ObjectDataSource会试图传递4个参 数给GetProductsPaged和2个参数给TotalNumberOfProducts .如果你没有移除 <asp:Parameter>,当浏览页面的时候你会获得一个象这样的错误信息 : “ObjectDataSource ''ObjectDataSource1'' could not find a non-generic method ''TotalNumberOfProducts'' that has parameters: startRowIndex, maximumRows.”

做完这些改动 后,ObjectDataSource的声明代码看起来应该和下面差不 多:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号