快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
C# 1
2
3
4
5
6
7 protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
// If we just deleted the last row in the GridView, decrement the PageIndex
if (e.Exception == null && GridView1.Rows.Count == 1)
// we just deleted the last row
GridView1.PageIndex = Math.Max(0, GridView1.PageIndex - 1);
}

另外一种办法是为ObjectDataSource的RowDeleted事件创 建一个event handler,设置AffectedRows属性为1.在第一步删除记录后(在第二步 之前),如果一行或多行记录被影响,GridView会更新PageIndex的值.然而 ObjectDataSource 并没有设置AffectedRows,因此这一步不会执行.我们需要在删 除操作成功的情况下手动设置AffectedRows.见下面的代 码:

C# 1
时使 用的排序字段是在创建GetProductsPaged存储过程时写死的.在GridView的智能标 签里有一个Enable Sorting的checkbox,不幸的是,在前面的工作里加上排序功能 仅仅只能将当前页的记录排序.比如,按照降序查看第一页的数据,第一页的 product的顺序回反转.见图18,Carnarvon Tigers 成为第一条记录,而在它之后的 71条记录被忽略了.排序时只排了显示在第一页的数据.

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

图18: 只有当前页的数据被排序了

发生这种情况的原因是调用 完BLL的GetProductsPaged方法返回数据之后才排序.耳针个方法只返回特定页的 记录.为了正确的排序,我们需要将排序表达式传到GetProductsPaged方法里,在返 回特定页的数据前进行排序.我们将在后面的教程里完成这个功能.

执行自 定义分页和删除如果你开启GridView的删除功能,你会发现删除最后一页的最后一 条记录时,GridView消失了,而不是正确的减掉PageIndex的值.在我们上面创建的 GridView里开启删除来查看这个bug.到最后一页(第九页),由于我们有81条记录, 每页显示10条,所以你会只看到一条记录,删除这条记录.

在默认分页 时,GridView会自动跳到第八页,这也是我们想要的结果.然而在自定义分页里, GridView却显示.发生这个的原因有点超出了本教程的范围,可以看Deleting the Last Record on the Last Page from a GridView with Custom Paging.简单的 说是因为点Delete时,GridView是按这样的步骤工作的:

删除记录.

按照给定的PageIndex和PageSize获取记录.

检查PageIndex确保没有超过 数据源的页的数量.如果是,GridView的PageIndex会自动减.

使用第二步获 取的记录绑定到GridView适当的页.

问题的根源在于第二步,当获取显示的 记录时,使用的PageIndex仍然是最后一页的PageIndex.因此没有记录被返回.在第 三步里GridView判断出PageIndex属性大于数据源的总页数(因为最后一页的最后 一条数据被删除了) 就对PageIndex减1.在第四步里GridView试图将第二步获取的 数据作为数据源进行绑定,但是没有任何数据,因此显示的GridView不见了.在默认 分页里没有这个问题是因为在第二步还是返回的所有数据.

我们可以用两 种方法来修改这个.第一是为GridView的RowDeleted事件创建一个event handler

来判断在删除页里有多少条记录,如果只有一条,那么这条肯定是 最后一条,我们需要为PageIndex减1.当然我们希望只在删除成功后来修改 PageIndex的值.我们需要用e.Exception属性是否为空来判断.

这个方法之 所以起作用是因为它在第一步和第二步之间修改了PageIndex的值.因此在第二步 里正确的记录会被返回.见如下代码:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号