支持多风格自由变换的ASP分页类
1
<%2
Class Page3
Private CurrPage4
Private PageN5
Private UrlStr6
Private TempStr7
Private ErrInfo8
Private IsErr9
Private TotalRecord10
Private TotalPage11
Public PageRs12

13
Private TempA(11)14
Private TempB(8)15
'------------------------------------------------------------16
Private Sub Class_Initialize()17
CurrPage=1'//默认显示当前页为第一页18
PageN=10'//默认每页显示10条数据19
UrlStr="#"20
TempStr=""21
ErrInfo="ErrInfo:"22
IsErr=False23
End Sub24
Private Sub Class_Terminate()25
If IsObject(PageRs) Then26
PageRs.Close27
Set PageRs=Nothing28
End If29
Erase TempA30
Erase TempB31
End Sub32
'----------------------------------------------------------33
'//获取当前页码34
Public Property Let CurrentPage(Val)35
CurrPage=Val 36
End Property37
Public Property Get CurrentPage()38
CurrentPage=CurrPage39
End Property40
'//获取每页显示条数41
Public Property Let PageNum(Val)42
PageN=Val43
End Property44
Public Property Get PageNum()45
PageNum=PageN46
End Property47
'//获取URL48
Public Property Let Url(Val)49
UrlStr=Val50
End Property51
Public Property Get Url()52
Url=UrlStr53
End Property54
'//获取模板55
Public Property Let Temp(Val)56
TempStr=Val57
End Property58
Public Property Get Temp()59
Temp=TempStr60
End Property61
'------------------------------------------------------------62

63
Public Sub Exec(Sql,ConnObj)64
On Error Resume Next65
Set PageRs=Server.CreateObject("ADODB.RecordSet")66
PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高67
PageRs.PageSize = PageN '定义分页记录集每页显示记录数68
PageRs.Open Sql,ConnObj,0,169
If Err.Number<>0 Then70
Err.Clear71
PageRs.Close72
Set PageRs=Nothing73
ErrInfo=ErrInfo&"建立或打开记录集错误
"74
IsErr=True75
Response.Write ErrInfo76
Response.End77
End If78
TotalRecord=PageRs.RecordCount'//如果为0呢?79
If TotalRecord>=1 Then80
'----------------------------------------------------------------------------开始81
'//计算总页数,Ps,为什么不用PageRs.PageCount呢?82
'If TotalRecord Mod PageN=0 Then83
'TotalPage=PageRs.RecordCount\PageN84
'Else85
'TotalPage=PageRs.RecordCount\PageN86
'TotalPage=Abs(Int(TotalPage))87
'End If88
TotalPage=PageRs.PageCount89
'//处理当前接收页码,默认的为1,所以不是数字类型的都会为190
If IsNumeric(CurrPage) Then91
CurrPage=CLNg(CurrPage)92
If CurrPage<1 Then CurrPage=193
If CurrPage>TotalPage Then CurrPage=TotalPage94
Else95
'//Dim M:M="":IsNumeric(M)=True96
CurrPage=197
End If98
'---------------------------------------------------------------------------结束99
Else100
TotalPage=0101
CurrPage=1102
End If103
'//104
PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头105
PageRs.PageSize=PageN106
End Sub107
Private Sub Init()108
'Private TempA(10)109
TempA(1)="{N1}" '//首页110
TempA(2)="{N2}"'//上一页111
TempA(3)="{N3}"'//下一页112
TempA(4)="{N4}"'//尾页113
TempA(5)="{N5}"'//当前页码114
TempA(6)="{N6}"'//页码总数115
TempA(7)="{N7}"'//每页条数116
TempA(8)="{N8}"'//文章总数117
TempA(9)="{L}"'//循环标签开始118
TempA(10)="{N}"'//循环内单标签:页码119
TempA(11)="{L/}"'//循环标签结束120
'Private TempB(8)121
TempB(1)="首页"122
TempB(2)="上一页"123
TempB(3)="下一页"124
TempB(4)="尾页"125
TempB(5)=CurrPage'//当前页码126
TempB(6)=TotalPage'//页码总数127
TempB(7)=PageN'//每页条数128
TempB(8)=TotalRecord'//文章总数129
End Sub130
Public Sub Show(Style)131
If IsErr=True Then132
Response.Write ErrInfo133
Exit Sub134
End If135

136
Call Init()137
Select Case Style138
Case 1139
Response.Write StyleA()140
Case 2141
Response.Write StyleB()142
Case 3143
Response.Write StyleC()144
Case 4145
Response.Write StyleD()146
Case Else147
ErrInfo=ErrInfo&"不存在当前样式
"148
Response.Write ErrInfo149
End Select150
End Sub151
Public Function ShowStyle(Style)152
If IsErr=True Then153
ShowStyle=ErrInfo154
Exit Function155
End If156

157
Call Init()158
Select Case Style159
Case 1160
ShowStyle= StyleA()161
Case 2162
ShowStyle= StyleB()163
Case Else164
ErrInfo=ErrInfo&"不存在当前样式
"165
ShowStyle=ErrInfo166
End Select167
End Function168

169
Private Function StyleA()170
'首页 上一页 下一页 尾页 本页为第1/20页,共20页,每页10条,文章总数200条171
'//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页172
'//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条173
If IsEmpty(TempStr) Then174
ErrInfo=ErrInfo&"模板为空
"175
StyleB=ErrInfo176
Exit Function177
End If178
Dim M179
If TotalPage>1 Then180
If CurrPage>1 Then181
M="<a href='"&UrlStr&"Page=1'>"&"首页"&"</a>"182
TempStr=Replace(TempStr,"{N1}",M)183
M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"上一页"&"</a>"184
TempStr=Replace(TempStr,"{N2}",M)185
If CurrPage<TotalPage Then186
M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"187
TempStr=Replace(TempStr,"{N3}",M)188
M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"189
TempStr=Replace(TempStr,"{N4}",M)190
Else191
TempStr=Replace(TempStr,"{N3}","下一页")192
TempStr=Replace(TempStr,"{N4}","尾页")193
End If194
Else195
TempStr=Replace(TempStr,"{N1}","首页")196
TempStr=Replace(TempStr,"{N2}","上一页")197
M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"198
TempStr=Replace(TempStr,"{N3}",M)199
M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"200
TempStr=Replace(TempStr,"{N4}",M)201
End If202
Else203
TempStr=Replace(TempStr,"{N1}","首页")204
TempStr=Replace(TempStr,"{N2}","上一页")205
TempStr=Replace(TempStr,"{N3}","下一页")206
TempStr=Replace(TempStr,"{N4}","尾页")207
End If208
T=TempStr209
T=Replace(T,"{N8}",TotalRecord)210
T=Replace(T,"{N6}",TotalPage)211
T=Replace(T,"{N5}",CurrPage)212
T=Replace(T,"{N7}",PageN)213
TempStr=T214
StyleA=TempStr215
End Function216

217
Private Function StyleB()218
'首页 |< 1 2 3 4 5 6 7 >| 尾页219
'//标签:{N1} {N2} {L}{N}{L/}{N3}{N4}220
If IsEmpty(TempStr) Then221
ErrInfo=ErrInfo&"模板为空
"222
StyleB=ErrInfo223
Exit Function224
End If225
Dim ForceNum,BackNum'//当前页的前面和后面显示个数226
ForceNum=5227
BackNum=4228
Dim M229
'//首页230
M="<a href='"&UrlStr&"Page=1'>"&TempB(1)&"</a>"231
TempStr=Replace(TempStr,"{N1}",M)232
'//尾页233
M="<a href='"&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"234
TempStr=Replace(TempStr,"{N4}",M)235
'//前一页236
M="|<"237
If CurrPage-1>=1 Then238
M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"239
End If240
TempStr=Replace(TempStr,"{N2}",M)241
'//后一页242
M=">|"243
If CurrPage+1<=TotalPage Then244
M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"245
End If246
TempStr=Replace(TempStr,"{N3}",M)247
'//取出循环标签248
Dim N1,N2,N3,N4,N5,N6249
If InStr(TempStr,"{L}")>0 Then250
N1=InStr(TempStr,"{L}")251
End If252
If InStr(TempStr,"{L/}")>0 Then253
N2=InStr(TempStr,"{L/}")254
End If255
If N2<=N1 Then256
ErrInfo=ErrInfo&"循环标签出错
"257
StyleB=ErrInfo258
Exit Function259
End If260
N3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板261
N4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板262
N4=Replace(N4,"{L/}","")263
'//页码列表264
Dim FirstPageNum,LastPageNum265
If CurrPage-ForceNum<=1 Then266
FirstPageNum=1267
PageList=""268
Else269
FirstPageNum=CurrPage-ForceNum270
PageList="
"271
End If272
If CurrPage+BackNum>=TotalPage Then273
LastPageNum=TotalPage274
PageList_2=""275
Else276
LastPageNum=CurrPage+BackNum277
PageList_2="
"278
End If279
Dim I280
For I=FirstPageNum To LastPageNum281
If I=CurrPage Then282
N5=Replace(N4,"{N}","<b>"&I&"</b>")283
N6=N6&N5284
Else285
M="<a href='"&UrlStr&"Page="&I&"'>"&I&"</a>"286
N5=Replace(N4,"{N}",M)287
N6=N6&N5288
End If289
Next290
TempStr=Replace(TempStr,N3,N6)291
StyleB=TempStr292
End Function293

294
Private Function StyleC()295
'首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页296
'//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页297
'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}298
Dim T299
T=StyleB()300
'//前十页301
M="|<<"302
If CurrPage-10>=1 Then303
M="<a href='"&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"304
End If305
T=Replace(T,"{N9}",M)306
M=">>|"307
If CurrPage+10<=TotalPage Then308
M="<a href='"&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"309
End If310
T=Replace(T,"{N10}",M)311
StyleC=T312
End Function313

314
Private Function StyleD()315
'//此风格在StyleC的基础上修改316
'//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条317
'//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页318
'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}319
Dim T320
T=StyleC()321
T=Replace(T,"{N8}",TotalRecord)322
T=Replace(T,"{N6}",TotalPage)323
T=Replace(T,"{N5}",CurrPage)324
T=Replace(T,"{N7}",PageN)325
StyleD=T326
End Function327

328
End Class329
%>330

万条数据的分页时间300多豪秒之间
Set test = New Page '创建啦
test.CurrentPage=1 '自己去读取拉,当前的页数
test.temp="{N1}{N2}{N3} {N4}"'这里是显示的模版,自己可以定义,至于标签,可以自己去那个类里找
test.Exec "Select * From [movie]",conn '这里执行sql语句,conn就是数据连接对象了
test.Show 1 '显示分页样式,可以根据用户输入的参数把这里的1换成变量
这个类可以扩展的地方很多,不错哦.
另外还有其他一些参数可以设置的.
test.CurrentPage=1 '自己去读取拉,当前的页数
test.temp="{N1}{N2}{N3} {N4}"'这里是显示的模版,自己可以定义,至于标签,可以自己去那个类里找
test.Exec "Select * From [movie]",conn '这里执行sql语句,conn就是数据连接对象了
test.Show 1 '显示分页样式,可以根据用户输入的参数把这里的1换成变量
这个类可以扩展的地方很多,不错哦.
另外还有其他一些参数可以设置的.
浙公网安备 33010602011771号