1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

ASP通用分页类

本帖由 小叶2006-06-04 发布。版面名称:后端开发

  1. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    首先是分页类文件page.asp的代码:

    <%
    '程序参数说明
    'PapgeSize 定义分页每一页的记录数
    'GetRS 返回经过分页的Recordset此属性只读
    'GetConn 得到数据库连接
    'GetSQL 得到查询语句
    '程序方法说明
    'ShowPage 显示分页导航条,唯一的公用方法

    Const Btn_First="<font face=""webdings"">9</font>" '定义第一页按钮显示样式
    Const Btn_Prev="<font face=""webdings"">3</font>" '定义前一页按钮显示样式
    Const Btn_Next="<font face=""webdings"">4</font>" '定义下一页按钮显示样式
    Const Btn_Last="<font face=""webdings"">:</font>" '定义最后一页按钮显示样式
    Const XD_Align="Center" '定义分页信息对齐方式
    Const XD_Width="100%" '定义分页信息框大小

    Class XdownPage
    Private XD_PageCount,XD_Conn,XD_Rs,XD_SQL,XD_PageSize,Str_errors,int_curpage,str_URL,int_totalPage,int_totalRecord,XD_sURL

    '=================================================================
    'PageSize 属性
    '设置每一页的分页大小
    '=================================================================
    Public Property Let PageSize(int_PageSize)
    If IsNumeric(Int_PageSize) Then
    XD_PageSize=CLng(int_PageSize)
    Else
    str_error=str_error & "PageSize的参数不正确"
    ShowError()
    End If
    End Property

    Public Property Get PageSize
    If XD_PageSize="" or (not(IsNumeric(XD_PageSize))) Then
    PageSize=10
    Else
    PageSize=XD_PageSize
    End If
    End Property

    '=================================================================
    'GetRS 属性
    '返回分页后的记录集
    '=================================================================
    Public Property Get GetRS()
    Set XD_Rs=Server.createobject("adodb.recordset")
    XD_Rs.PageSize=PageSize
    XD_Rs.Open XD_SQL,XD_Conn,1,1
    If not(XD_Rs.eof and XD_RS.BOF) Then
    If int_curpage>XD_RS.PageCount Then
    int_curpage=XD_RS.PageCount
    End If
    XD_Rs.AbsolutePage=int_curpage
    End If
    Set GetRS=XD_RS
    End Property

    '================================================================
    'GetConn 得到数据库连接
    '================================================================
    Public Property Let GetConn(obj_Conn)
    Set XD_Conn=obj_Conn
    End Property

    '================================================================
    'GetSQL 得到查询语句
    '================================================================
    Public Property Let GetSQL(str_sql)
    XD_SQL=str_sql
    End Property

    '==================================================================
    'Class_Initialize 类的初始化
    '初始化当前页的值
    '==================================================================
    Private Sub Class_Initialize
    '========================
    '设定分页的默认值
    '========================
    XD_PageSize=10 '设定分页的默认值为10
    '========================
    '获取当前面的值
    '========================
    If Request("page") = "" Then
    int_curpage=1
    ElseIf Not(IsNumeric(request("page"))) Then
    int_curpage=1
    ElseIf CInt(Trim(Request("page"))) < 1 Then
    int_curpage=1
    Else
    Int_curpage = CInt(Trim(Request("page")))
    End If
    End Sub

    '====================================================================
    'ShowPage 创建分页导航条
    '有首页、前一页、下一页、末页、还有数字导航
    '====================================================================
    Public Sub ShowPage()
    Dim str_tmp
    XD_sURL = GetUrl()
    int_totalRecord=XD_RS.RecordCount
    If int_totalRecord<=0 Then
    str_error=str_error & "总记录数为零,请输入数据"
    Call ShowError()
    End If
    If int_totalRecord="" then
    int_TotalPage=1
    Else
    If int_totalRecord mod PageSize =0 Then
    int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1
    Else
    int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1+1
    End If
    End If

    If Int_curpage>int_Totalpage Then
    int_curpage=int_TotalPage
    End If
    '==================================================================
    '显示分页信息,各个模块根据自己要求更改显求位置
    '==================================================================
    Response.Write("")
    str_tmp = ShowFirstPrv
    Response.Write(str_tmp)
    str_tmp=showNumBtn
    Response.Write(str_tmp)
    str_tmp = ShowNextLast
    Response.Write str_tmp
    str_tmp = ShowPageInfo
    Response.Write(str_tmp)

    response.write("")
    End Sub

    '====================================================================
    'ShowFirstPrv 显示首页、前一页
    '====================================================================
    Private Function ShowFirstPrv()
    Dim Str_tmp,int_prvpage
    If int_curpage = 1 Then
    str_tmp = Btn_First & " " & Btn_Prev
    Else
    int_prvpage = int_curpage-1
    str_tmp = "<a href=""" & XD_sURL & "1" & """>" & Btn_First&"</a>&nbsp;<a href=""" & XD_sURL & CStr(int_prvpage) & """>" & Btn_Prev & "</a>"
    End If
    ShowFirstPrv = str_tmp
    End Function

    '====================================================================
    'ShowNextLast 下一页、末页
    '====================================================================
    Private Function ShowNextLast()
    Dim str_tmp,int_Nextpage
    If Int_curpage >= int_totalpage Then
    str_tmp = Btn_Next & " " & Btn_Last
    Else
    Int_NextPage = int_curpage+1
    str_tmp = "<a href=""" & XD_sURL & CStr(int_nextpage) & """>" & Btn_Next & "</a>&nbsp;<a href="""& XD_sURL & CStr(int_totalpage) & """>" & Btn_Last & "</a>"
    End If
    ShowNextLast = str_tmp
    End Function

    '====================================================================
    'ShowNumBtn 数字导航
    '====================================================================
    Private Function showNumBtn()
    Dim i,str_tmp
    For i=1 To int_totalpage
    str_tmp = str_tmp & "&nbsp;[<a href=""" & XD_sURL & CStr(i) & """>" & i & "</a>]&nbsp;"
    Next
    showNumBtn = str_tmp
    End Function

    '====================================================================
    'ShowPageInfo 分页信息
    '更据要求自行修改
    '====================================================================
    Private Function ShowPageInfo()
    Dim str_tmp
    str_tmp = "&nbsp;页次:" & int_curpage & "/" & int_totalpage & "页&nbsp;共" & int_totalrecord & "条记录&nbsp;" & XD_PageSize & "条/每页"
    ShowPageInfo = str_tmp
    End Function

    '==================================================================
    'GetURL 得到当前的URL
    '更据URL参数不同,获取不同的结果
    '==================================================================
    Private Function GetURL()
    Dim strurl,str_url,i,j,search_str,result_url
    search_str = "page="

    strurl = Request.ServerVariables("URL")
    Strurl = split(strurl,"/")
    i = UBound(strurl,1)
    str_url = strurl(i) '得到当前页文件名

    str_params=Trim(Request.ServerVariables("QUERY_STRING"))
    If str_params = "" Then
    result_url = str_url & "?page="
    Else
    If InstrRev(str_params,search_str)=0 Then
    result_url = str_url & "?" & str_params & "&page="
    Else
    j = InstrRev(str_params,search_str)-2
    If j=-1 Then
    result_url=str_url & "?page="
    Else
    str_params = Left(str_params,j)
    result_url = str_url & "?" & str_params & "&page="
    End If
    End If
    End If
    GetURL = result_url
    End Function

    '====================================================================
    ' 设置 Terminate 事件。
    '====================================================================
    Private Sub Class_Terminate
    XD_RS.Close
    Set XD_RS = nothing
    End Sub

    '====================================================================
    'ShowError 错误提示
    '====================================================================
    Private Sub ShowError()
    If str_Error <> "" Then
    Response.Write("" & str_Error & "")
    Response.End
    End If
    End Sub
    End Class
    %>


    调用类演示:

    <!---#include file="./page.asp"-->
    <%
    set conn = server.CreateObject("adodb.connection")
    conn.open "driver={microsoft access driver (*.mdb)};dbq=" & server.Mappath("./db.mdb")
    %>
    <%
    '类调用样例
    Set MyPage = New XdownPage '创建对象
    MyPage.GetConn = conn '得到数据库连接
    MyPage.GetSQL = "Select * From [数据库表名称] Order By ID Desc" 'sql语句
    MyPage.PageSize = 10 '设置每一页的记录条数据为10条
    Set rs = MyPage.GetRS() '返回Recordset

    For i=1 To MyPage.PageSize '显示数据
    If Not rs.EOF Then
    Response.Write(rs("数据字段") & "<br/>")
    rs.Movenext
    Else
    Exit For
    End If
    Next

    MyPage.ShowPage() '显示分页信息,这个方法可以,在set rs = mypage.getrs()以后,可在任意位置调用,可以调用多次
    %>
     
  2. 著名混混

    著名混混 New Member

    注册:
    2006-03-22
    帖子:
    292
    赞:
    1
    小叶,我是一个对asp半生不熟的人,我想问一下,类(class)是什么时候用的?他和函数一样吗?为什么有了函数后还需要类呢?然后怎么调用的?谢谢,麻烦给解答一下
     
  3. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    你还半生不熟,我倒,不敢发帖了。哈哈:p
     
  4. 著名混混

    著名混混 New Member

    注册:
    2006-03-22
    帖子:
    292
    赞:
    1
    真的哈,我asp都是靠自己看代码学的,基本上没看过书,所以很多初级的东西都不太明白,麻烦给解释一下嘛