asp高效率通用分页类

作者:网络 来源:佚名 更新时间:2008-12-30 23:19:48 点击:
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • <%
    '=====================================================================
    'papgesize 定义分页每一页的记录数
    'getrs 返回经过分页的recordset此属性只读
    'getconn 得到数据库连接
    'getsql 得到查询语句
    '程序方法说明
    'showpage 显示分页导航条,唯一的公用方法
    '例:
    ' set mypage=new xdownpage '创建对象
    ' mypage.getconn=conn '得到数据库连接
    ' mypage.getsql="select * from productinfo order by id asc"
    ' mypage.pagesize=5 '设置每一页的记录条数据为5条
    ' set rs=mypage.getrs() '返回recordset
    ' mypage.showpage() '显示分页信息,这个方法可以,在set rs=mypage.getrs()以后
    ' 任意位置调用,可以调用多次
    ' for i=1 to mypage.pagesize '接下来的操作就和操作一个普通recordset对象一样操作
    ' if not rs.eof then '这个标记是为了防止最后一页的溢出
    ' response.write rs(0) & "
    ' 这里就可以自定义显示方式了
    ' rs.movenext
    ' else
    ' exit for
    ' end if
    ' next
    '=====================================================================
    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="right" '定义分页信息对齐方式
    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
    '=================================================================
    '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
    int_totalrecord=xd_rs.recordcount
    if int_totalrecord<=0 then
    str_error=str_error & "总记录数为零,请输入数据"
    call showerror()
    end if
    if int_totalrecord<pagesize then
    int_totalpage=1
    else
    int_totalpage=xd_rs.pagecount
    '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 "<table border=0 width="&xd_width&"><tr><td align="&xd_align&">"
    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 "</td></tr></table>"
    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="&geturl&"1>"&btn_first&"</a><a href="&geturl & 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="& geturl & int_nextpage &">"&btn_next&"</a><a href="&geturl & 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 & "<a href="& geturl & i &">["&i&"]</a>"
    next
    shownumbtn=str_tmp
    end function
    '====================================================================
    'showpageinfo 分页信息
    '更据要求自行修改
    '
    '====================================================================
    private function showpageinfo()
    dim str_tmp
    str_tmp="页次:"&int_curpage&"/"&int_totalpage&"页 共"&int_totalrecord&"条记录 "&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)
    'response.write i
    'response.end
    str_url=strurl(i)'得到当前页文件名
    str_params=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
    private sub showerror()
    if str_error <> "" then
    response.write("<font color=""#ff0000""><b>" & sw_error & "</font>")
    response.end
    end if
    end sub
    end class
    %>