ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率
时使 用的排序字段是在创建GetProductsPaged存储过程时写死的.在GridView的智能标 签里有一个Enable Sorting的checkbox,不幸的是,在前面的工作里加上排序功能 仅仅只能将当前页的记录排序.比如,按照降序查看第一页的数据,第一页的 product的顺序回反转.见图18,Carnarvon Tigers 成为第一条记录,而在它之后的 71条记录被忽略了.排序时只排了显示在第一页的数据.
图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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |