`

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页

阅读更多
ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的.
在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页方法.
当然显示控件还是用DataGrid的, 因为数据绑定很方便^_^.
要保证不传输冗余的数据,那么必须在数据库中数据读取时实现分页, 数据库的分页操作可以放在存储过程中. 看了CSDN的一篇Blog中讲了一个百万级数据分页的存储过程的实现(http://blog.csdn.net/wellknow/posts/55167.aspx,他的这个方法可以根据不同情况进行适当的优化), 根据他的方法,这里实现一个简单的SQL语句来实现这里分页需要的存储过程。
create procedure ListProduct
(
@PageIndex int, -- 分页后需要页的序号
@PageSize int, -- 一页的大小
@ConditionSQL – 查询条件的SQL语句
)
AS … 具体代码就不写了(可以参考上面的链接).
具体的SQL语句如下:
SELECT TOP 100 * FROM (select * from product where productid<200000) T WHERE T.productid NOT IN
(SELECT TOP 900 productid FROM (select productid from product where productid<200000) T1 ORDER BY T1.productid asc) ORDER BY productid asc
这条语句的 从总的商品(30万)中取出productid<200000(共20万),再按每页100的大小分页,然后取出第10页.
Public DataTable ListProduct(int pageIndex, int pageSize)
{
//ADO.net从数据库中取出数据的代码就略过^_^.
}
用上面的存储过程读出的数据在DataGrid里面分页, 必须把DataGrid的AllowPaging和AllowCustomPaging设置为true
protected System.Web.UI.WebControls.DataGrid ProductGrid;
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事件(处理用户新选中某页时的事件)
private void ProductGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
// 如果在存储过程分页功能中用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事件,如果不这样处理的话,可能会遇到一些意想不到的情况(如果你确实需要的话也可以上面这段代码,不过最好实际测试一下)。
整个过程完成后,再次浏览页面,觉得速度真是快多了。
运行环境:
WinXP Pro SP1, SQLServer 2000, .Net Framework 1.1
分享到:
评论

相关推荐

    自定义asp.net中DataGrid的一个分页控件

    自定义asp.net中DataGrid的一个分页控件。。 在winform下实现。。。其实有了思路哪儿写都一样O(∩_∩)O哈哈~

    ASP.NET中自定义DataGrid分页设置的实现

    这里实现了DataGrid的个性化分页,现在把代码贴出来朋友们参考,同时在这个功能的实现过程,参考了“飞刀”从国外翻译的一篇文章。

    ASP.net中大结果集的分页

    因此,在 asp.net中,分页很简单,但是默认的DataGrid分页事件会从数据库中把所 有的记录全部读出来放到asp.net web应用程序中。当你的数据在一百万以上的时候,这将引起 严重的性能问题(如果你不相信,你可以在你...

    asp.net(GridView)存储过程分页源码

    asp.net分页,存储过程,gridview分页,datagrid分页

    基于ASP.NET的自定义分页显示

    基于ASP.NET的自定义分页显示,针对WEB数据库记录的显示问题,用实例讨论了在ASP.NET框架下使用DataGrid控件对数据库记录的一种自定义分页显示

    在Asp.net中使用DataGrid分页

    此实例程序使用DataGrid控件的AllowPaging属性可以为Web页面很方便地实现页面功能

    \ASP.NET技巧DataGrid传统分页方式

    \ASP.NET技巧DataGrid传统分页方式

    asp.net中DataList,DataGrid中的分页控件dll

    DataList,DataGrid中的分页dll

    c#asp.net分页专业用于Aspnet分页控件

    应用VS2005开发工具,用c#语言编写后台的asp.net程序。对datagrid进行分页。简单易用。

    .NET 通用分页控件

    在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至...

    ASP.NET常见问题集锦.zip

    ASP.NET中自定义控件的创建和使用.doc ASP.NET实现用户在线检测的类源码.txt ASP.NET常见问题集锦.zip ASP.NET弹出式日历选择控件的实现.doc ASP.NET程序中常用的三十三种代码.txt ASP.NET页面间数据传递小结....

    ASP.NET2.0 DataGrid的漂亮的分页

    ASP.NET2.0 DataGrid的漂亮的分页 在VS 2005分页功能上的提升

    Asp.net分页控件AspNetPager7.2

    在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至...

    asp.net 快速通用分页空间

    asp.net在快速分页控件。把源码发给大家,以便大家学习,改进。 基于sqlserver 2000存储过程 分页速度快。使用方便 实现了repeater ,datalist ,datagrid,gridview的重载。

    asp.net分页设计

    ASP.NET 是一种服务器端制作动态WEB 页的全新编程手段。...对利用自带分页功能的数据控件(如:DataGrid)和对于没有自带分页功能的控件(如:DataList)进行分页分别结合实例 进行了详细的阐述。

    asp.net开发常用整理集合

     Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取世界IP地址库显所在城市信息  MySQL事务处理  SQL内部常用函数  为gridview“删除”...

    asp.net 仿PetShop的Reapter控件分页功能

    使用.net 2003和MS SQL ...尽管.net中已经提供了一些控件实现了自动的分页功能,但我自己感觉要想真正成为编程高手,不仅仅懂得去用,还应该了解运行的原理和机制。像DataGrid等其他控件的分页功能,应该是这个原理!

    能用漂亮分页控件及Demo源码

    AspNetPager除提供默认的类似于DataGrid和GridView的PostBack分页方式外,还支持通过Url进行分页,象大多数asp程序中分页一样, Url分页方式允许用户通过在浏览器地址栏中输入相应的地址即可直接进入指定页面,也...

    ASP.NET基础控件-教程

    内容:  Asp.net页面内传参数... Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取世界IP地址库显所在城市信息  MySQL事务处理  SQL内部常用函数

    asp.net知识库

    在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值...

Global site tag (gtag.js) - Google Analytics