ASP_NET中实现数据分页的几种方法
- 格式:pdf
- 大小:554.45 KB
- 文档页数:3
ComputerKnowledgeandTechnology
电脑知识
与技术
本栏目责任编辑
:谢媛媛
软件设计开发第7
卷第20
期(2011
年7
月)
ASP.NET中实现数据分页的几种方法
庄新妍,周洪翠
(呼伦贝尔学院计算机科学与技术学院,内蒙古海拉尔021008)
摘要:ASP.NET
是一种服务器端制作动态WEB
页的全新编程手段。该文讨论了在ASP.NET
框架下对WEB
数据库几种实现分页
显示的方法。对利用自带分页功能的数据控件(如:DataGrid
)和对于没有自带分页功能的控件(如:DataList
)进行分页分别结合实例
进行了详细的阐述。
关键词:ASP.NET
;WEB
数据库;DataGrid
;Datalist
;分页
中图分类号:TP311
文献标识码:A
文章编号:1009-3044(2011)20-4896-03
SeveralMethodsofRealizingDataPagingintheASP.NET
ZHUANGXin-yan,ZHOUHong-cui
(HunlunbeierUniversityofComputerScienceandTechnologyInstitute,Hailaer021008,China
)
Abstract:ASP.NETisabrandnewprogrammingmethodthatmakesdynamicWEBpagethroughtheserver.Thisarticlediscussesseveral
methodsofrealizingpagedisplayofWEBdatabaseintheASP.NETframework.Itdetailedthathowtopageforusingthedatacontrolowning
pagingfunction(suchas:DataGrid)andfornotbringingpagingcontrolfunction(suchas:DataList)Combinedwithexamplesrespectively.
Keywords:ASP.NET;WEBdatabase;DataGrid;Datalist;paging
随着计算机网络技术的发展和普遍应用,人们的工作和生活越来越离不开网络,当人们在网上查看查询信息时,如果成千上万
条记录显示在一个页面,即不方便浏览,显示速度也很慢。另外,如果屏幕显示不下,还要借助于窗口滚动条,显然也很麻烦。但是,
若对查询的结果分页显示,效果将截然不同。从用户的角度,这种分页显示的结果看起来整齐简洁;从系统的角度,分页显示的速度
比一下子显示整个查询记录来得快,因而可以节省网络带宽,增加系统的反应速度。本文由浅至深讲解几种分页的方法。
1使用DataGrid控件自带的默认导航栏进行标准分页
DataGrid
就是一款方便显示数据的控件,将它的DataSource
属性与包含数据库记录集的对象绑定就能很容易的显示记录集的
数据。而且该控件自带的分页功能,使得实现分页变得非常容易。使用DataGrid
控件自带的默认导航栏进行分页显示除了正常的数
据绑定之外还必须设置该控件的AllowPaging
属性为"True"
表示允许分页,然后为了使单击导航栏控件页码时能跳转到特定页,还
必须创建一个进行相应的事件处理程序,该事件处理程序为DataGrid
控件的PageIndexChanged
事件。具体代码如下:
ProtectedSubMydataGrid_PageIndexChanged(sourceAsObject,eAsDataGridPageChangedventArgs)
MydataGrid.CurrentPageIndex=e.NewPageIndex
‘重新指定DataGrid
对象的当前页。
CallMyDataBind()
‘重新进行数据绑定。
EndSub
SubMyDataBind()
‘将数据绑定到DataGrid
对象中。
DimconnAsNewOleDbConnection("provider=microsoft.jet.oledb.4.0;datasource="&Server.MapPath("
教材购销系统.mdb"))
DimcmdAsNewOleDbCommand("select*from
教材一览表",conn)
DimdsAsNewDataSet
DimdaapAsNewOleDbDataAdapter(cmd)
daap.Fill(ds,"
教材一览表")
MydataGrid.DataSource=ds.Tables("
教材一览表")
MydataGrid.DataBind()
EndSub
其中e.NewPageIndex
会返回用户选择的页码,而CurrentPageIndex
属性是用来指定要显示的数据页。除此之外还可以通过
DataGrid
的PagerStyle
属性设置分页导航
栏的样式。
2使用DataGrid控件自带的默认
导航栏进行自定义分页
第一种方法虽然编码少,且可利用数
据集的很多功能,但它的缺点也是显而易
收稿日期:2011-04-19
作者简介:庄新妍(1978-
),女,讲师,硕士,研究方向为计算机技术应用;周洪翠(1978-
),女,讲师,工学硕士,研究方向为计算机技
术应用。表1E-mail:xsjl@cccc.net.cn
http://www.dnzs.net.cn
Tel:+86-551-56909635690964ISSN1009-3044
ComputerKnowledgeandTechnology
电脑知识
与技术
Vol.7,No.20,July2011.
4896ComputerKnowledgeandTechnology
电脑知识
与技术
软件设计开发
本栏目责任编辑:
谢媛媛第7
卷第20
期(2011
年7
月)
见甚至是致命的:它每次显示一个新页时都是将全部数据读取到数据集中,然后只显示其中部分资源(也就是当前页的数据)。数据
集会较长时间占用服务器宝贵的内存资源,返回的数据量大时情况会更严重,虽然可尽量减少数据集中的数据量,可每次使用数据
适配器填充数据集会增大开销,降低效率,为了避免这种情况DataGrid
控件还提供了一套自定义分页功能,可以在每一次显示新页
时只从数据库中读取当前页的数据到数据集,这样自然可以节省内存资源。
要完成自定义分页,除了要设置DataGrid
控件的AllowPaging="True"
之外还要设置表示允许自定义分页的属性AllowCustom-
Paging="True"
。另外,在填充数据集时要自行指定从第几条记录开始填充,填充到当前页的记录数。具体实现数据绑定的代码如下:
SubMyDataBind()
DimconnAsNewOleDbConnection("provider=microsoft.jet.oledb.4.0;datasource="&Server.MapPath("
教材购销系统.mdb"))
DimcmdCAsNewOleDbCommand("SELECTCount(
书号)AS
书号之计数FROM
教材一览表;",conn)
'
获取数据表的记录总数对DataGrid
控件的VirtualItemCount
属性赋值,该属性指示DataGrid
在进行分页填充时的实际记录数
conn.Open()
DimtotalAsLong=cmdC.ExecuteScalar()
conn.Close()
MyDataGrid.VirtualItemCount=total
‘设置总的记录数。
'
获取第一条填充记录的索引
DimStartAsLong=MyDataGrid.CurrentPageIndex*MyDataGrid.PageSize
'
填充数据集
DimcmdAsNewOleDbCommand("select*from
教材一览表",conn)
DimdsAsNewDataSet
DimdaapAsNewOleDbDataAdapter(cmd)
daap.Fill(ds,Start,MyDataGrid.PageSize,"
教材一览表")
MyDataGrid.DataSource=ds.Tables("
教材一览表")
MyDataGrid.DataBind()
EndSub
其中VirtualItemCount
属性指示该DataGrid
控件绑定的数据源实际有多少条记录。这个属性实际上是告诉DataGrid
控件一共
有多少页。另外通过DataGrid
控件的当前页属性CurrentPageIndex
乘以DataGrid
控件每单页上显示记录项数属性PageSize
获得记
录集要填充的首条记录的索引,(Start=MyDataGrid.CurrentPageIndex*MyDataGrid.PageSize
,请注意页码索引从零开始)。通过Page-
Size
属性获得记录集要填充的记录条数。最后使用daap.Fill(ds,Start,MyDataGrid.PageSize,"
教材表")
语句对记录集填充。
当然自定义分页也要创建一个进行相应的事件处理程序,该事件处理程序和第一种分页方法描述的PageIndexChanged
事件代
码完全相同,不再赘述。
整个页面的运行效果见图1
。
3使用DataList控件进行自定义分页
DataGrid
控件只能以表格的形式来显示数据,但是DataL-
ist
控件可以以更自由的方式显示数据,比如可以在一行显示
多条记录。不过DataList
控件默认是不支持分页显示的,也没
有自带的分页导航栏,所以实现的方法会更复杂一点。这时需
要我们自己自己计算记录总数和总的页数,
编码实现页码导航
栏,确定DataList
控件要显示的页码。导航栏就是一些普通的HTML
标记实现的链接到本网页的超级链接,单击这些超链接就会重
新打开本页面,并将页码参数传递过去。软后根据要显示的当前页页码计算出当前页第一条记录的索引。最后使用OleDb-
DataAdapter
对象的Fill(DataSet
对象名,
开始记录索引,
每页最多允许记录数,"
表名")
方法来进行填充。具体实现代码如下。
ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.Load
IfPage.IsPostBack=FalseThen
Session("PageSize")=4
‘确定每页显示的记录个数。
‘根据记录总数和每页显示的记录个数计算总页数。
Session("PageCount")=Ceiling(CountTotal()/Session("PageSize"))
IfSession("CurrentPageIndex")IsNothingThen
Session("CurrentPageIndex")=0
Else
Session("CurrentPageIndex")=Me.Request.QueryString("PageIndex")-1
EndIf
CallMyDataBind()
CallmyViewPage()
EndIf
EndSub
SubMyDataBind()
DimconnAsNewOleDbConnection("provider=microsoft.jet.oledb.4.0;datasource="&Server.MapPath("
教材购销系统.mdb"))
DimcmdAsNewOleDbCommand("select*from
教材一览表orderby
书名",conn)
DimdsAsNewDataSet图1
4897