Asp.Net 数据分页
.Net 所使用的ADO.Net较前身ADO在性能上有较大的提升,但是操作起来也较为繁琐,在 Asp时代,对数据进行分页使用 RecordSet 的 PageSize 和 AbsolutePage即可完成对数据的分页操作,非常简单,进入 .Net 后,RecordSet 对象没有了,取而代之的是 DataSet/DataTable,没有了 PageSize/AbsolutePage,分页成了一件非常头痛的事。
所有的 Asp.Net 初级教程中都会讲解如何使用 DataGrid 控件进行基于 Post 的分页,当我练习完这个例子后从来没有在实战中使用过,原因有二:
- 代码过于复杂;
- 不支持url分页,不利于搜索引擎和调试,定制度不高。
所以建议大家也都不要用这个分页了,呵呵,真垃圾。
Asp.Net 能不能像 Asp 一样简单地分页呢?答案是可以的,要使用 PageDataSource 类,这里有篇很完整的教程给大家参考,一位高手的Blog。
使用 PageDataSource 很方便,但它也有个致命的缺点,就是性能上的下降,偶对一张10000条数据的表格进行了 Asp/Asp.Net(DataGrid)/Asp.Net(PageDataSource) 三项分页速度测试,结果分别是 600ms-700ms / 500ms / 900ms-1000ms ,使用了 PageDataSource 分页速度竟然比 Asp 都慢,郁闷,原因大概是因为作了二次数据绑定造成的吧,大家可以自行测试,看是否和我测试的结果相同。
精华部分到啦……
要提高分页的性能,还得使用自定义分页,首先我们来看看传统的 Asp 分页时需要哪些参数?
- PageSize(每页显示记录条数)
- RecordCount(总记录数)
- PageCount(总页数)
- AbsolutePage(绝对页)。
回到 Asp.Net,我们来做一个例子,我们对 /NewsList.asp?Page=3 进行分页,可以这样做:
1int PageSize=20; //定义每页显示的记录条数
2int RecordCount=”select count(*) from news”; //这句不完整,大家自行完善
3int PageCount=RecordCount/PageSize; //总页数算出来啦
4int CurrentPage=Convert.ToInt32(Request.QueryString[“Page”].ToString());
关键时候到了,需要向 DataSet 中填充数据,注意这个技巧:
1dAdapter.Fill(dSet, (CurrentPage - 1) * PageSize, PageSize, "Table");
这一句可以向DataSet中填充指定位置的数据,这样就可以达到分页的效果啦。
经测试,这样的分页因向DataSet中填充数据量的减少,降低了服务器内存消耗,页面执行速度大约在 120ms-170ms,爽啊!:em31:
- 文章ID:239
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/asp-net-pages/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。