支持多风格变换的ASP分页类

    技术2022-05-11  121

    这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间<%Class PagePrivate CurrPagePrivate PageNPrivate UrlStrPrivate TempStrPrivate ErrInfoPrivate IsErrPrivate TotalRecordPrivate TotalPagePublic  PageRs

    Private TempA(11)Private TempB(8)'------------------------------------------------------------Private Sub Class_Initialize()      CurrPage=1'//默认显示当前页为第一页      PageN=10'//默认每页显示10条数据      UrlStr="#"      TempStr=""      ErrInfo="ErrInfo:"      IsErr=FalseEnd SubPrivate Sub Class_Terminate()      If IsObject(PageRs) Then            PageRs.Close            Set PageRs=Nothing      End If      Erase TempA      Erase TempBEnd Sub'----------------------------------------------------------'//获取当前页码Public Property Let CurrentPage(Val)      CurrPage=Val End PropertyPublic Property Get CurrentPage()      CurrentPage=CurrPageEnd Property'//获取每页显示条数Public Property Let PageNum(Val)      PageN=ValEnd PropertyPublic Property Get PageNum()      PageNum=PageNEnd Property'//获取URLPublic Property Let Url(Val)      UrlStr=ValEnd PropertyPublic Property Get Url()      Url=UrlStrEnd Property'//获取模板Public Property Let Temp(Val)      TempStr=ValEnd PropertyPublic Property Get Temp()      Temp=TempStrEnd Property'------------------------------------------------------------

    Public Sub Exec(Sql,ConnObj)      On Error Resume Next      Set PageRs=Server.CreateObject("ADODB.RecordSet")      PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高      PageRs.PageSize = PageN '定义分页记录集每页显示记录数      PageRs.Open Sql,ConnObj,0,1      If Err.Number<>0 Then        Err.Clear     PageRs.Close     Set PageRs=Nothing        ErrInfo=ErrInfo&"建立或打开记录集错误..."     IsErr=True     Response.Write ErrInfo     Response.End      End If      TotalRecord=PageRs.RecordCount'//如果为0呢?      If TotalRecord>=1 Then      '----------------------------------------------------------------------------开始      '//计算总页数,Ps,为什么不用PageRs.PageCount呢?      'If TotalRecord Mod PageN=0 Then        'TotalPage=PageRs.RecordCount/PageN      'Else        'TotalPage=PageRs.RecordCount/PageN     'TotalPage=Abs(Int(TotalPage))      'End If   TotalPage=PageRs.PageCount      '//处理当前接收页码,默认的为1,所以不是数字类型的都会为1      If IsNumeric(CurrPage) Then         CurrPage=CLNg(CurrPage)         If CurrPage<1 Then CurrPage=1      If CurrPage>TotalPage Then CurrPage=TotalPage      Else            '//Dim M:M="":IsNumeric(M)=True         CurrPage=1      End If      '---------------------------------------------------------------------------结束      Else         TotalPage=0         CurrPage=1      End If      '//      PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头      PageRs.PageSize=PageNEnd SubPrivate Sub Init()      'Private TempA(10)      TempA(1)="{N1}" '//首页      TempA(2)="{N2}"'//上一页      TempA(3)="{N3}"'//下一页      TempA(4)="{N4}"'//尾页      TempA(5)="{N5}"'//当前页码      TempA(6)="{N6}"'//页码总数      TempA(7)="{N7}"'//每页条数      TempA(8)="{N8}"'//文章总数      TempA(9)="{L}"'//循环标签开始      TempA(10)="{N}"'//循环内单标签:页码      TempA(11)="{L/}"'//循环标签结束      'Private TempB(8)      TempB(1)="首页"      TempB(2)="上一页"      TempB(3)="下一页"      TempB(4)="尾页"      TempB(5)=CurrPage'//当前页码      TempB(6)=TotalPage'//页码总数      TempB(7)=PageN'//每页条数      TempB(8)=TotalRecord'//文章总数End SubPublic Sub Show(Style)      If IsErr=True Then        Response.Write ErrInfo     Exit Sub      End If

          Call Init()      Select Case Style      Case 1         Response.Write StyleA()      Case 2         Response.Write StyleB()      Case 3         Response.Write StyleC()      Case 4         Response.Write StyleD()      Case Else         ErrInfo=ErrInfo&"不存在当前样式..."      Response.Write ErrInfo      End SelectEnd SubPublic Function ShowStyle(Style)      If IsErr=True Then        ShowStyle=ErrInfo     Exit Function      End If

          Call Init()      Select Case Style      Case 1         ShowStyle= StyleA()      Case 2         ShowStyle= StyleB()      Case Else         ErrInfo=ErrInfo&"不存在当前样式..."  ShowStyle=ErrInfo      End SelectEnd Function

    Private Function StyleA()'首页 上一页 下一页 尾页  本页为第1/20页,共20页,每页10条,文章总数200条'//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页'//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条If IsEmpty(TempStr) Then      ErrInfo=ErrInfo&"模板为空..."      StyleB=ErrInfo      Exit FunctionEnd IfDim MIf TotalPage>1 Then      If CurrPage>1 Then        M="<a href='"&UrlStr&"Page=1'>"&"首页"&"</a>"     TempStr=Replace(TempStr,"{N1}",M)     M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"上一页"&"</a>"     TempStr=Replace(TempStr,"{N2}",M)     If CurrPage<TotalPage Then       M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"    TempStr=Replace(TempStr,"{N3}",M)    M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"          TempStr=Replace(TempStr,"{N4}",M)        Else       TempStr=Replace(TempStr,"{N3}","下一页")    TempStr=Replace(TempStr,"{N4}","尾页")     End If      Else        TempStr=Replace(TempStr,"{N1}","首页")     TempStr=Replace(TempStr,"{N2}","上一页")        M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"     TempStr=Replace(TempStr,"{N3}",M)     M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"        TempStr=Replace(TempStr,"{N4}",M)      End IfElse      TempStr=Replace(TempStr,"{N1}","首页")      TempStr=Replace(TempStr,"{N2}","上一页")      TempStr=Replace(TempStr,"{N3}","下一页")      TempStr=Replace(TempStr,"{N4}","尾页")End IfT=TempStrT=Replace(T,"{N8}",TotalRecord)T=Replace(T,"{N6}",TotalPage)T=Replace(T,"{N5}",CurrPage)T=Replace(T,"{N7}",PageN)TempStr=TStyleA=TempStrEnd Function

    Private Function StyleB()'首页 |< 1 2 3 4 5 6 7 >| 尾页'//标签:{N1} {N2} {L}{N}{L/}{N3}{N4}If IsEmpty(TempStr) Then      ErrInfo=ErrInfo&"模板为空..."      StyleB=ErrInfo      Exit FunctionEnd IfDim ForceNum,BackNum'//当前页的前面和后面显示个数ForceNum=5BackNum=4Dim M'//首页M="<a href='"&UrlStr&"Page=1'>"&TempB(1)&"</a>"TempStr=Replace(TempStr,"{N1}",M)'//尾页M="<a href='"&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"TempStr=Replace(TempStr,"{N4}",M)'//前一页M="|<"If CurrPage-1>=1 Then      M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"End IfTempStr=Replace(TempStr,"{N2}",M)'//后一页M=">|"If CurrPage+1<=TotalPage Then      M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"End IfTempStr=Replace(TempStr,"{N3}",M)'//取出循环标签Dim N1,N2,N3,N4,N5,N6If InStr(TempStr,"{L}")>0 Then      N1=InStr(TempStr,"{L}")End IfIf InStr(TempStr,"{L/}")>0 Then      N2=InStr(TempStr,"{L/}")End IfIf N2<=N1 Then      ErrInfo=ErrInfo&"循环标签出错..."      StyleB=ErrInfo      Exit FunctionEnd IfN3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板N4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板N4=Replace(N4,"{L/}","")'//页码列表Dim FirstPageNum,LastPageNumIf CurrPage-ForceNum<=1 Then   FirstPageNum=1   PageList=""Else   FirstPageNum=CurrPage-ForceNum   PageList="... ..."End IfIf CurrPage+BackNum>=TotalPage Then   LastPageNum=TotalPage   PageList_2=""Else   LastPageNum=CurrPage+BackNum   PageList_2="... ..."End IfDim IFor I=FirstPageNum To LastPageNum      If I=CurrPage Then        N5=Replace(N4,"{N}","<b>"&I&"</b>")     N6=N6&N5      Else        M="<a href='"&UrlStr&"Page="&I&"'>"&I&"</a>"     N5=Replace(N4,"{N}",M)     N6=N6&N5      End IfNextTempStr=Replace(TempStr,N3,N6)StyleB=TempStrEnd Function

    Private Function StyleC()'首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页'//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}Dim TT=StyleB()'//前十页M="|<<"If CurrPage-10>=1 Then      M="<a href='"&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"End IfT=Replace(T,"{N9}",M)M=">>|"If CurrPage+10<=TotalPage Then      M="<a href='"&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"End IfT=Replace(T,"{N10}",M)StyleC=TEnd Function

    Private Function StyleD()'//此风格在StyleC的基础上修改'//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条'//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}Dim TT=StyleC()T=Replace(T,"{N8}",TotalRecord)T=Replace(T,"{N6}",TotalPage)T=Replace(T,"{N5}",CurrPage)T=Replace(T,"{N7}",PageN)StyleD=TEnd Function

    End Class%>

     

    最新回复(0)