曾经看过许多分页的文章,参考其中一些意见,写成一个类,希望能带来方便
<%
'=====================================================================
'代码编写 kiyeer
'Email: kiyeer@tom.com
'本程序可以免费使用、修改,希望我的程序能给你一定的帮助
'不过希望把修改后程序发送一份给本人,谢谢!
'但请保留以上请息,它并不影响程序执行的速度
'程序特点
'本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户自定义,支持URL多个参数
'使用说明
'属性说明
'PageStyle 定义是否用数字分页显示方式,默认为上下页分面方式
'PageNum 定义每页显示多少个数字导航页
'PageSize 定义分页每一页的记录数
'GetRS 返回经过分页的Recordset此属性只读
'GetConn 得到数据库连接
'GetSQL 得到查询语句
'GetKey 得到URL地址参数(搜索信息时必须用)
'方法说明
'ShowPage 显示分页导航条,唯一的公用方法
'=====================================================================
Class PageClass
Private PSC_Conn,PSC_Rs,PSC_SQL,PSC_PageSize,Err,PSC_FormAction,PSC_PP,Ver
Private PSC_Errors,PSC_CurPage,PSC_TotalPage,PSC_TotalRecord,PSC_Key,PSC_Show_Style
Dim str_Turn_First,str_Turn_Prev,str_Turn_Next,str_Turn_Last
'Class_Initialize 类的初始化
'初始化当前页的值
Private Sub Class_Initialize
Ver ="Version 1.02" '设置版本信息
PSC_PageSize=10 '设定分页的默认值为10
Err=0 '初始化错误为0
PSC_Show_Style=false '初始化,不用数字分页方式
PSC_PP=5 '定义每页显示多少个数字导航页
str_Turn_First="<font style=""font-family:webdings"" ShowIt=""第一页"">9</font>" '定义第一页按钮显示样式
str_Turn_Prev="<font style=""font-family:webdings"" ShowIt=""上一页"">7</font>" '定义前一页按钮显示样式
str_Turn_Next="<font style=""font-family:webdings"" ShowIt=""下一页"">8</font>" '定义下一页按钮显示样式
str_Turn_Last="<font style=""font-family:webdings"" ShowIt=""最后一页"">:</font>" '定义最后一页按钮显示样式
'获取当前面的页面值
If request("page")="" Then
PSC_CurPage=1
ElseIf not(IsNumeric(request("page"))) Then
PSC_CurPage=1
ElseIf CInt(Trim(request("page")))<1 Then
PSC_CurPage=1
Else
PSC_CurPage=CInt(Trim(request("page")))
End If
End Sub
'设置 Terminate 事件。
Private Sub Class_Terminate
PSC_Rs.close
Set PSC_Rs=nothing
End Sub
'属性,设置每一页的分页大小
Public Property Let PageSize(Int_PageSize)
If IsNumeric(Int_PageSize) Then
PSC_PageSize=CLng(Int_PageSize)
Else
PSC_Errors=PSC_Errors & "页面大小的参数不正确"
Err=1
End If
End Property
'属性,设置分页方式
Public Property Let PageStyle(str_Style)
PSC_Show_Style=CBool(str_Style)
End Property
'属性,设置分页方式
Public Property Let PageNum(int_PageNum)
PSC_PP=Cint(int_PageNum)
End Property
'属性,返回分页后的记录集
Public Property Get GetRs()
Set PSC_Rs=Server.createobject("adodb.recordset")
PSC_Rs.PageSize=PSC_PageSize
PSC_Rs.Open PSC_SQL,PSC_Conn,1,1
If not(PSC_Rs.eof and PSC_Rs.BOF) Then
PSC_TotalPage=PSC_Rs.pagecount
PSC_TotalRecord=PSC_Rs.RecordCount
If PSC_TotalRecord<=0 Then
PSC_Errors=PSC_Errors & "对不起,没有符合条件的记录"
Err=2
End If
If PSC_CurPage>PSC_TotalPage Then
PSC_CurPage=PSC_TotalPage
End If
PSC_Rs.AbsolutePage=PSC_CurPage
Else
PSC_Errors=PSC_Errors & "对不起,没有符合条件的记录"
Err=3
End If
Set GetRs=PSC_Rs
End Property
'得到数据库连接
Public Property Let GetConn(obj_Conn)
Set PSC_Conn=obj_Conn
End Property
'得到查询语句
Public Property Let GetSQL(str_sql)
PSC_SQL=str_sql
End Property
'设置页面地址参数
Public Property Let GetKey(Str_key)
if Trim(Str_key)<>"" then
PSC_Key=Str_key
PSC_FormAction=right(PSC_Key,len(PSC_Key)-1) '设置Form转页参数
end if
End Property
'创建分页导航条
Public Sub ShowPage()
Dim PSC_Str_Temp
if Err=0 then
response.write "<table border=0 width=""100%"" cellpadding=0 cellspacing=2><form name=gotopage method=post action='?"&PSC_FormAction&"'><tr><td align=left style=""font-size:9pt"">"
PSC_Str_Temp=ShowOtherInfo
response.write PSC_Str_Temp
if PSC_Show_Style then
PSC_Str_Temp=ShowNumStyle
response.write PSC_Str_Temp
else
PSC_Str_Temp=ShowTextStyle
response.write PSC_Str_Temp
end if
response.write " 转到:<input type='text' name='page' size=2 maxLength=3 class='in' value="&PSC_CurPage&">页 "
response.write "<input class=button type='submit' value='GO'>"
response.write "</td></tr></form></table>"
end if
End Sub
'上下页导航方式
Private Function ShowTextStyle()
Dim PSC_Str_Temp
If PSC_CurPage=1 Then
PSC_Str_Temp=PSC_Str_Temp&" "&str_Turn_First&" "&str_Turn_Prev
Else
PSC_Str_Temp=PSC_Str_Temp&" <a href=?Page=1"&PSC_Key&">"&str_Turn_First&"</a> <a href=?Page="&PSC_CurPage-1&PSC_Key&">"& str_Turn_Prev&"</a>"
End If
If PSC_CurPage>=PSC_TotalPage Then
PSC_Str_Temp=PSC_Str_Temp&" "&str_Turn_Next & " " & str_Turn_Last
Else
PSC_Str_Temp=PSC_Str_Temp&" <a href=?Page="&PSC_CurPage+1&PSC_Key&">"&str_Turn_Next&"</a> <a href=?Page="&PSC_TotalPage&PSC_Key&">"&str_Turn_Last&"</a>"
End If
ShowTextStyle=PSC_Str_Temp
End Function
'数字导航方式
Private Function ShowNumStyle()
Dim PSC_Str_Temp,PSC_PN,PSC_PI,PSC_PageNum
PSC_PI=1
if PSC_TotalPage mod PSC_PP > 0 then
PSC_PageNum=PSC_TotalPage\PSC_PP+1
else
PSC_PageNum=PSC_TotalPage\PSC_PP
end if
if PSC_CurPage mod PSC_PP > 0 then
PSC_PN=PSC_CurPage\PSC_PP+1
else
PSC_PN=PSC_CurPage\PSC_PP
end if
if cint(PSC_PageNum)>1 and cint(PSC_PN)<>1 then
PSC_Str_Temp=PSC_Str_Temp&" <a href='?page=1"&PSC_Key&"'>"&str_Turn_First&"</a> <a href='?page="&(PSC_PN-1)*PSC_PP&PSC_Key&"'>"&str_Turn_Prev&"</a>"
end if
for PSC_PI=1+(PSC_PN-1)*PSC_PP to PSC_PN*PSC_PP
if cint(PSC_PI)>cint(PSC_TotalPage) then exit for
if cint(PSC_CurPage)=cint(PSC_PI) then
PSC_Str_Temp=PSC_Str_Temp&" <font color=#990000><b>"&PSC_PI&"</b></font>"
else
PSC_Str_Temp=PSC_Str_Temp&" <a href='?page="&PSC_PI&PSC_Key&"' ShowIt=""第"&PSC_PI&"页"">"&PSC_PI&"</a>"
end if
next
if cint(PSC_PageNum)>1 and cint(PSC_PN)<>cint(PSC_PageNum) then
PSC_Str_Temp=PSC_Str_Temp&" <a href='?page="&PSC_PN*PSC_PP+1&PSC_Key&"'>"&str_Turn_Next&"</a> <a href='?page="&PSC_TotalPage&PSC_Key&"'>"&str_Turn_Last&"</a>"
end if
ShowNumStyle=PSC_Str_Temp
End Function
'分页的其它信息
Private Function ShowOtherInfo()
Dim PSC_Str_Temp
PSC_Str_Temp="页次:<font color=blue><b>"&PSC_CurPage&"</b></font>/<font color=red><b>"&PSC_TotalPage&"</b></font>页 共<font color=red><b>"&PSC_TotalRecord&"</b></font>条记录 <font color=red><b>"&PSC_PageSize&"</b></font>条/页"
ShowOtherInfo=PSC_Str_Temp
End Function
'获取类错误值
Public Function Error()
Error=Err
End Function
'获取类错误信息
Public Function GetErrors()
GetError=PSC_Errors
End Function
'获取类版本信息
Public Function Version()
Version=Ver
End Function
End class
%>
