ASP网站制作之DataGrid自界说分页
优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件datagrid|分页ASP.NET中使用DataGrid的自界说分页功效和存储历程分离完成高效分页ASP.Net中的DataGrid有内置分页功效,可是它的默许的分页体例效力是很低的,出格是在数据量很年夜的时分,用它内置的分页功效几近是不成能的事,由于它会把一切的数据从数据库读出来再举行分页,这类只拔取了一小部分而丢失落年夜部分的办法是不成往取的.
在最进的一个项目中由于一个办理页面要办理的数据量十分年夜,以是必需分页显现,而且不克不及用DataGrid的内置分页功效,因而本人完成分页.上面先容一下我在项目顶用到的分页办法.
固然显现控件仍是用DataGrid的,由于数据绑定很便利^_^.
要包管不传输冗余的数据,那末必需在数据库中数据读取时完成分页,数据库的分页操纵能够放在存储过程当中.看了CSDN的一篇Blog中讲了一个百万级数据分页的存储历程的完成(http://blog.csdn.net/wellknow/posts/55167.aspx,他的这个办法能够依据分歧情形举行得当的优化),依据他的办法,这里完成一个复杂的SQL语句来完成这里分页必要的存储历程。
createprocedureListProduct
(
@PageIndexint,--分页后必要页的序号
@PageSizeint,--一页的巨细
@ConditionSQLC查询前提的SQL语句
)
AS…详细代码就不写了(能够参考下面的链接).
详细的SQL语句以下:
SELECTTOP100*FROM(select*fromproductwhereproductid<200000)TWHERET.productidNOTIN
(SELECTTOP900productidFROM(selectproductidfromproductwhereproductid<200000)T1ORDERBYT1.productidasc)ORDERBYproductidasc
这条语句的从总的商品(30万)中掏出productid<200000(共20万),再按每页100的巨细分页,然后掏出第10页.
PublicDataTableListProduct(intpageIndex,intpageSize)
{
//ADO.net从数据库中掏出数据的代码就略过^_^.
}
用下面的存储历程读出的数据在DataGrid内里分页,必需把DataGrid的AllowPaging和AllowCustomPaging设置为true
protectedSystem.Web.UI.WebControls.DataGridProductGrid;
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事务(处置用户新选中某页时的事务)
privatevoidProductGrid_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse)
{
//假如在存储历程分页功效顶用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事务,假如不如许处置的话,大概会碰到一些意想不到的情形(假如你的确必要的话也能够下面这段代码,不外最好实践测试一下)。
全部历程完成后,再次扫瞄页面,以为速率真是快多了。
运转情况:
WinXPProSP1,SQLServer2000,.NetFramework1.1
</p>当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
页:
[1]