欢迎来到天天文库
浏览记录
ID:22937085
大小:70.18 KB
页数:7页
时间:2018-11-02
《海量大量数据gridview显示高效率分页实现方法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、问题: GridView显示海量数据时效率极其低,每次要从数据库从取出海量数据,这明显不现实。 解决方案: 显示多少,就从数据库中读取多少数据,即每次取GridView显示的一个页面数据,点击下一页是,再取下一页相应的数据。 真的是很简单,但如果对asp.net不熟悉的人来说,还是有点难度。就比如说:当页面刷新时,怎样使一个变量的值保持不变呢?很晕是吧 下面我们说分析实现方法:1、刷新页面,保持变量值不变 先讲怎样在刷新页面是使一个变量值保持不变,以前我都采用页面传值法,总觉得有点怪,本来就是本页的数据还要通过
2、页面传值来保存。后来在网上发现VewState这东东,有点像Session,用法基本上一样。他们的区别是:Session是在页面之间,而ViewState是在它自己的页面保持一个值。用法: ViewState["PageCounts"]=3; 下次要用时直接取出来就OK了。 2、GridView海量数据高效分页实现代码 下面代码来自互联网 constintPageSize=20;//定义每页显示记录 intPageCount,RecCount,CurrentPage,Pages,JumpPage;
3、//定义几个保存分页参数变量 privatevoidPage_Load(objectsender,System.EventArgse) { if(!IsPostBack) { RecCount=Calc();//通过Calc()函数获取总记录数 PageCount=RecCount/PageSize+OverPage(); //计算总页数(加上OverPage()函数防止有余数造成显示数据不完整) ViewState["PageCounts"]=RecCount/PageSize-ModPag
4、e(); //保存总页参数到ViewState(减去ModPage()函数防止SQL语句执行时溢出查询范围,可以用存储过程分页算法来理解这句) ViewState["PageIndex"]=0;//保存一个为0的页面索引值到ViewState ViewState["JumpPages"]=PageCount; //保存PageCount到ViewState,跳页时判断用户输入数是否超出页码范围 //显示LPageCount、LRecordCount的状态 LPageCount.Text
5、=PageCount.ToString(); LRecordCount.Text=RecCount.ToString(); //判断跳页文本框失效 if(RecCount<=20) gotoPage.Enabled=false; TDataBind();//调用数据绑定函数TDataBind()进行数据绑定运算 } } //计算余页 publicintOverPage() { intpages=0; if(RecCount%PageSize!=0) pages=1;
6、else pages=0; returnpages; } //计算余页,防止SQL语句执行时溢出查询范围 publicintModPage() { intpages=0; if(RecCount%PageSize==0&&RecCount!=0) pages=1; else pages=0; returnpages; } /* *计算总记录的静态函数 *本人在这里使用静态函数的理由是:如果引用的是静态数据或静态函数,连接器会优化生成代码,去掉动态重定位项(对海
7、量数据表分页效果更明显)。 *希望大家给予意见、如有不正确的地方望指正。 */ publicstaticintCalc() { intRecordCount=0; SqlCommandMyCmd=newSqlCommand("selectcount(*)ascofromredheadedfile",MyCon()); SqlDataReaderdr=MyCmd.ExecuteReader(); if(dr.Read()) RecordCount=Int32.Parse(dr["co"].ToStri
8、ng()); MyCmd.Connection.Close(); returnRecordCount; } //数据库连接语句(从Web.Config中获取) publicstaticSqlConnectionMyCon() { S
此文档下载收益归作者所有