分享
 
 
 

ASP.NET处理浏览器中数据分页的方法

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在ASP的数据库编程的时,由于浏览器的大小限制,在要浏览的数据记录比较多的时候,为了达到更直观的效果,我们把这些数据记录分成若干的页面,通过数据导航按钮(或者其他超链接),分页的浏览。其实这种数据记录的分页浏览在ASP.NET也能够实现。并且在实现的过程中比起在ASP的处理过程显得条理更清晰,也更容易些。

通过浏览器进行分页浏览数据记录基本类型主要有二种。其他类型的分页浏览要么是对这二种类型的修改,要么是对这二种类型的综合。具体表现方式的如下面这二幅图:

图01:第一种分页浏览数据记录式样

图02:第二种分页浏览数据记录式样

下面就来探讨一下在ASP.NET中这二种分页浏览数据记录的具体实现过程:

首先来介绍一下我们使用的数据库,在本文中为了方便起见,我们使用了本地数据库Access 2000,数据库名称为"Data.mdb",里面存放了一张数据表"tblItem"。此数据表的结构如下:

字段名称

字段类型

ItemID

自动编号

ItemName

文本类型

如果你采用的是别的数据库,只需对下面介绍的程序进行简单的修改就可以了。这将在下面介绍。

一. 本文程序设计和运行的软件环境:

(1).微软公司视窗2000服务器版

(2)..Net FrameWork SDK Beta 2

二. 第一种分页浏览数据记录的关键步骤以及实现方法:

(1).首先要得到初始浏览数据记录的超链接字符串:

这其实很关键,因为在第一种分页浏览中的"首页"、"下一页"等操作,都是通过在这个超链接字符串后面加入要浏览页面的参数来实现的,在本文的程序中是通过GetPageName ( )函数来实现的。此函数具体如下:

Function GetPageName ( ) As String

Dim Str As String

Dim Pos As Short

Str = Request.ServerVariables ( "Script_Name" ).Trim ( )

Pos = Str.LastIndexOf ( "/" )

If Pos >= 0 Then

Return Str.SubString ( Pos + 1 )

Else

Return Str

End If

End Function

(2).要得到你所要浏览的数据记录总数:

在本文中,为了方便,我们是把数据表"tblItem"中的全部记录都拿来浏览。ASP.NET页面通过ADO.NET来得到数据表"tblItem"。下面代码就是利用ADO.NET来得到"tblItm"表中记录总数的程序代码:

<% @ Page Language = "VB" %>

<% @ Import Namespace = "System.Data" %>

<% @ Import Namespace = "System.Data.OleDb" %>

<script runat = "server" >

Dim strConn As String ''定义数据连接字符串

Dim SQL As String ''定义SQL语句

Dim odConn As OleDbConnection

Dim odAdapt As OleDbDataAdapter

Dim DS As DataSet ''创建DataSet对象

Dim DT As DataTable ''创建DataTable对象

Dim nStart As Integer ''存放当前页面的起始记录序号

Dim nEnd As Integer ''存放当前页面的终止记录序号

Dim i As Integer

''确认要浏览的页面序号

nPage = Convert.ToInt32 ( Request.QueryString ( "Page" ) )

SQL = "SELECT * FROM tblItem "

''创建数据连接字符串

strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; " & _

" Data Source = " & Server.MapPath ( "data.mdb" ) & " ; " & _

" User ID = ; Password = ; "

Try

''得到数据记录总数

odConn = New OleDbConnection ( strConn )

odAdapt = New OleDbDataAdapter ( SQL , odConn )

DS = New DataSet

odAdapt.Fill ( DS )

DT = DS.Tables ( 0 )

''得到数据记录总数

nRecCount = DT.Rows.Count

Catch e As Exception

Response.Write("错误信息: <b>" & e.Message & "</b><p>")

nRecCount = 0

End Try

</script >

(3).计算出浏览的数据记录总共页面数:

在浏览页面中,我们发现了每一页只浏览5条记录,你可以通过修改程序中定义一个常量"Record_Per_Page"来改变每一页浏览数据记录的个数。在知道了要浏览数据记录的总数后,通过下面代码来计算出要显示这些数据记录所需要的页面总数:

Const Record_Per_Page As Short = 5 ''定义每一页显示的记录数

Dim nPageCount As Integer ''保存总共的数据页面数目

Dim nPage As Integer ''存放要浏览当前数据页面号

nPageCount = nRecCount \ Record_Per_Page

If nRecCount Mod Record_Per_Page > 0 Then

nPageCount += 1

End If

''确认浏览命令中的页面参数是否越界,如果越界则重置页面序号

If nPage < 1Then

nPage = 1

End If

IfnPage > nPageCount Then

nPage = nPageCount

End If

(4).数据导航的实现方法:

其实数据导航是通过对参数"Page"赋值来实现的,其中程序中的"nPage"是当前数据页面序号, "nPageCount"是数据页面的总和。下面是实现这些数据导航的具体实现代码:

Response.Write ( " <p >数据导航:<A HREF = """ & Script_Name & _

"?Page=" & ( 1 ).ToString ( ) & _

""">首页 </A >" )

Response.Write( " &nbsp;&nbsp;&nbsp;&nbsp; " )

''浏览"上一页"处理办法

Response.Write ( " <A HREF = """ & Script_Name & _

"?Page=" & ( nPage - 1 ).ToString ( ) & _

""" >上一页</A > " )

Response.Write ( "&nbsp;&nbsp;&nbsp;&nbsp; " )

''浏览"下一页"处理办法

Response.Write ( "<A HREF =""" & Script_Name &_

"?Page=" & ( nPage + 1 ).ToString ( ) & _

""" >下一页</A > " )

Response.Write ( "&nbsp;&nbsp;&nbsp;&nbsp;" )

''浏览"尾页"处理办法

Response.Write ( "<A HREF = """ & Script_Name &_

"?Page=" & ( nPageCount ).ToString ( ) & _

""" >尾页</A > " )

''显示当前页和合计页数

Response.Write ( "&nbsp;&nbsp;&nbsp;&nbsp;" & "页次:"& nPage.ToString ( )& "/" & nPageCount.ToString ( ) & " <br > " )

(5).显示不同页面的数据记录:

根据超链接字符串得到"Page"值,然后根据此值来得到在此页面中要显示的起始记录号和结束记录号,再通过一个循环把这些记录给显示出来。下面这行代码是读取参数"Page":

nPage = Convert.ToInt32 ( Request.QueryString ( "Page" ) )

下面这些代码是根据用户想要去的页面得到起始记录号和结尾记录号,并通过屏幕显示出来:

Dim nStart As Integer ''存放当前页面的起始记录序号

Dim nEnd As Integer ''存放当前页面的终止记录序号

Dim i As Integer

nStart = Record_Per_Page *( nPage - 1 )

nEnd = nStart + Record_Per_Page - 1

If nEnd > nRecCount - 1 Then

nEnd = nRecCount - 1

End If

''在屏幕中输出记录

For i = nStart To nEnd

Response.Write ( DT.Rows ( i ) ( "ItemName" ) & " <br > " )

Next

在本文介绍的二种分页浏览记录类型中,对于数据显示,我们采用了简化处理。我们知道在浏览器上,浏览记录一般都是通过DbGrid的形式来实现的,这一点在其实也好实现,读者只需稍微修改一下本文中的程序代码就可以实现。

三. 第一种分页浏览数据记录的完整程序代码(no1.aspx):

组织一下上面的这些步骤的实现方法,可以得到下列完整代码:

<% @ Page Language = "VB" %>

<% @ Import Namespace = "System.Data" %>

<% @ Import Namespace = "System.Data.OleDb" %>

<script runat = "server" >

Const Record_Per_Page As Short = 5 ''定义每一页显示的记录数

Private Script_Name As String

Sub Page_Load ( Source As Object , e As EventArgs )

Script_Name = GetPageName ( )

''第一种方式来分页显示数据

ShowRecords ( )

End Sub

''得到起始浏览超链接字符串

Function GetPageName ( ) As String

Dim Str As String

Dim Pos As Short

Str = Request.ServerVariables ( "Script_Name" ).Trim ( )

Pos = Str.LastIndexOf ( "/" )

If Pos >= 0 Then

Return Str.SubString ( Pos + 1 )

Else

Return Str

End If

End Function

''此函数的功能是分页显示数据库中的记录

Private Sub ShowRecords ( )

Dim strConn As String ''定义数据连接字符串

Dim SQL As String ''定义SQL语句

Dim odConn As OleDbConnection

Dim odAdapt As OleDbDataAdapter

Dim DS As DataSet ''创建DataSet对象

Dim DT As DataTable ''创建DataTable对象

Dim nRecCount As Integer ''保存记录总数

Dim nPageCount As Integer ''保存总共的数据页面数目

Dim nPage As Integer ''存放要浏览当前数据页面号

Dim nStart As Integer ''存放当前页面的起始记录序号

Dim nEnd As Integer ''存放当前页面的终止记录序号

Dim i As Integer

''确认要浏览的页面序号

nPage = Convert.ToInt32 ( Request.QueryString ( "Page" ) )

SQL = "SELECT * FROM tblItem "

''创建数据连接字符串

strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; " & _

" Data Source = " & Server.MapPath ( "data.mdb" ) & " ; " & _

" User ID = ; Password = ; "

Try

''得到数据记录总数

odConn = New OleDbConnection ( strConn )

odAdapt = New OleDbDataAdapter ( SQL , odConn )

DS = New DataSet

odAdapt.Fill ( DS )

DT = DS.Tables ( 0 )

nRecCount = DT.Rows.Count

Catch e As Exception

Response.Write("错误信息: <b>" & e.Message & "</b><p>")

nRecCount = 0

End Try

''判断是否存在数据记录

If nRecCount > 0 Then

'' 确定数据记录要显示的页面数

nPageCount = nRecCount \ Record_Per_Page

If nRecCount Mod Record_Per_Page > 0 Then

nPageCount += 1

End If

''确认浏览命令中的页面参数是否越界,如果越界则重置页面序号

If nPage < 1 Then

nPage = 1

End If

If nPage > nPageCount Then

nPage = nPageCount

End If

Response.Write ( "总共有数据记录" & nRecCount.ToString ( ) & " 条" & "。<br >" )

Response.Write(" <p > <b >第一种分页显示为:</b > <p > " )

''确认当前页面的开始记录和终止记录

nStart = Record_Per_Page * ( nPage - 1 )

nEnd = nStart + Record_Per_Page - 1

If nEnd > nRecCount - 1 Then

nEnd = nRecCount - 1

End If

''在屏幕中输出记录

For i = nStart To nEnd

Response.Write ( DT.Rows ( i ) ( "ItemName" ) & " <br > " )

Next

End If

''浏览"首页"处理办法

Response.Write ( " <p >数据导航:<A HREF = """ & Script_Name & _

"?Page=" & ( 1 ).ToString ( ) & _

""">首 页 </A >" )

Response.Write( " &nbsp;&nbsp;&nbsp;&nbsp; " )

''浏览"上一页"处理办法

Response.Write ( " <A HREF = """ & Script_Name & _

"?Page=" & ( nPage - 1 ).ToString ( ) & _

""" >上一页</A > " )

Response.Write ( "&nbsp;&nbsp;&nbsp;&nbsp; " )

''浏览"下一页"处理办法

Response.Write ( "<A HREF =""" & Script_Name & _

"?Page=" & ( nPage + 1 ).ToString ( ) & _

""" >下一页</A > " )

Response.Write ( "&nbsp;&nbsp;&nbsp;&nbsp;" )

''浏览"尾页"处理办法

Response.Write ( "<A HREF = """ & Script_Name & _

"?Page=" & ( nPageCount ).ToString ( ) & _

""" >尾 页</A > " )

''显示当前页和合计页数

Response.Write ( "&nbsp;&nbsp;&nbsp;&nbsp;" & "页次:"& nPage.ToString ( ) & "/" & nPageCount.ToString ( ) & " <br > " )

End Sub

</script >

四. 第二种分页浏览数据记录的关键步骤以及实现方法: 其实这二种分页方法在程序设计中是大同小异的,在第二种方法中,其前面的关键步骤中和第一种分页几乎相同,也是要得到浏览数据记录的总数,设定每一页要显示的数据记录个数,计算出总共有多少数据页面等等。这些步骤的实现方法可以参考第一种方法。第二种分页方法和第一种分页方法的主要区别在于数据导航的实现方法上。下列代码功能是实现第二种分页方法数据导航:

Response.Write ( " <p > 数据导航: " )

nPageEnd = nPage + 3

If nPageEnd > nPageCount

nPageEnd = nPageCount

End If

For i = 1 To nPageEnd

If i = nPage Then

Response.Write ( " <b > " & i.ToString ( ) & " </b > " )

Else

Response.Write ( "<A HREF = """ & SCRIPT_NAME & _

"?Page=" & ( i ).ToString ( )& _

""" > " & i.ToString ( ) & "</A > " )

End If

Next

If nPageEnd < nPageCount Then

Response.Write ( "<A HREF = """ & SCRIPT_NAME & _

"?Page=" & ( nPageEnd + 1 ).ToString ( ) & _

""" >更多...</A > " )

End If

五. 第二种分页浏览数据记录的完整源程序代码(no2.aspx):

no2.aspx和no1.aspx在程序设计的思想和方法上大致相同,下面是no2.aspx的源程序,具体如下:

<% @ Page Language = "VB" %>

<% @ Import Namespace = "System.Data" %>

<% @ Import Namespace = "System.Data.OleDb" %>

<script runat = "server" >

Const Record_Per_Page As Short = 5 ''定义每一页显示的记录数

Private Script_Name As String

Sub Page_Load ( Source As Object , e As EventArgs )

Script_Name = GetPageName ( )

''第二种方式来分页显示数据

ShowRecords ( )

End Sub

''得到起始浏览超链接字符串

Function GetPageName ( ) As String

Dim Str As String

Dim Pos As Short

Str = Request.ServerVariables ( "Script_Name" ).Trim ( )

Pos = Str.LastIndexOf ( "/" )

If Pos >= 0 Then

Return Str.SubString ( Pos + 1 )

Else

Return Str

End If

End Function

Private Sub ShowRecords ( )

Dim strConn As String ''定义数据连接字符串

Dim SQL As String ''定义SQL语句

Dim odConn As OleDbConnection

Dim odAdapt As OleDbDataAdapter

Dim DS As DataSet ''创建DataSet对象

Dim DT As DataTable ''创建DataTable对象

Dim nRecCount As Integer ''保存记录总数

Dim nPageCount As Integer ''保存总共的数据页面数目

Dim nPage As Integer ''存放要浏览当前数据页面号

Dim nStart As Integer ''存放当前页面的起始记录序号

Dim nEnd As Integer ''存放当前页面的终止记录序号

Dim nPageEnd As Integer ''存储当前页面的最后一面的序号

Dim i As Integer

''确认要浏览的页面序号

nPage = Convert.ToInt32 ( Request.QueryString ( "Page" ) )

SQL = "SELECT * FROM tblItem "

''创建数据连接字符串

strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; " & _

" Data Source = " & Server.MapPath ( "data.mdb" ) & " ; " & _

" User ID = ; Password = ; "

Try

''得到数据记录总数

odConn = New OleDbConnection ( strConn )

odAdapt = New OleDbDataAdapter ( SQL , odConn )

DS = New DataSet

odAdapt.Fill ( DS )

DT = DS.Tables ( 0 )

nRecCount = DT.Rows.Count

Catch e As Exception

Response.Write("错误信息: <b >" & e.Message & "</b > <p > " )

nRecCount = 0

End Try

If nRecCount > 0 Then

'' 确定数据记录要显示的页面数

nPageCount = nRecCount \ Record_Per_Page

If nRecCount Mod Record_Per_Page > 0 Then

nPageCount += 1

End If

''确认浏览命令中的页面参数是否越界,如果越界则重置页面序号

If nPage < 1Then

nPage = 1

End If

IfnPage > nPageCount Then

nPage = nPageCount

End If

Response.Write ( "总共有数据记录" & nRecCount.ToString ( ) & " 条" & "。<br >" )

Response.Write(" <p > <b >第二种分页显示为:</b > <p > " )

''确认当前页面的开始记录和终止记录

nStart = Record_Per_Page *( nPage - 1 )

nEnd = nStart + Record_Per_Page - 1

If nEnd > nRecCount - 1 Then

nEnd = nRecCount - 1

End If

''在屏幕中输出记录

For i = nStart To nEnd

Response.Write ( DT.Rows ( i ) ( "ItemName" ) & " <br > " )

Next

End If

Response.Write ( " <p > 数据导航: " )

nPageEnd = nPage + 3

If nPageEnd > nPageCount

nPageEnd = nPageCount

End If

For i = 1 To nPageEnd

If i = nPage Then

Response.Write ( " <b > " & i.ToString ( ) & " </b > " )

Else

Response.Write ( "<A HREF = """ & SCRIPT_NAME & _

"?Page=" & ( i ).ToString ( )& _

""" > " & i.ToString ( ) & "</A > " )

End If

Next

If nPageEnd < nPageCount Then

Response.Write ( "<A HREF = """ & SCRIPT_NAME & _

"?Page=" & ( nPageEnd + 1 ).ToString ( ) & _

""" >更多...</A > " )

End If

End Sub

</script >

本文介绍的这二种分页浏览记录类型虽然采用的数据库都是本地数据库,但对其他类型的数据库也是一样适用的,这只需要修改一下数据连接字符串就可以实现了,譬如如果采用了SQL Server数据库。此SQL Server数据库服务器是"Server1",数据库是"Data",用户名为缺省的"sa",没有设定密码。只需要把上面二段程序中的字符串"strConn"变换成:

strConn = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = Data ; Data Source = server1 "

就可以实现了。

六. 总结:

本文介绍的二种分页浏览数据记录方法在ASP.NET数据库编程方面是非常有用的,因为在数据处理方面,分页显示记录比起其他的一些处理,譬如:数据修改、删除等都要难些。希望上面的这些内容对你利用ASP.NET开发数据库程序有所帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有