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

本文介绍了一个自定义的ASP.NET分页控件实现方案,通过VB.NET代码展示了如何处理分页逻辑、异常捕获及多种样式展示,并提供了详细的示例代码。


  1
None.gif<%
  2None.gifClass Page
  3None.gifPrivate CurrPage
  4None.gifPrivate PageN
  5None.gifPrivate UrlStr
  6None.gifPrivate TempStr
  7None.gifPrivate ErrInfo
  8None.gifPrivate IsErr
  9None.gifPrivate TotalRecord
 10None.gifPrivate TotalPage
 11None.gifPublic  PageRs
 12None.gif
 13None.gifPrivate TempA(11)
 14None.gifPrivate TempB(8)
 15None.gif'------------------------------------------------------------
 16None.gifPrivate Sub Class_Initialize()
 17None.gif      CurrPage=1'//默认显示当前页为第一页
 18None.gif      PageN=10'//默认每页显示10条数据
 19None.gif      UrlStr="#"
 20None.gif      TempStr=""
 21None.gif      ErrInfo="ErrInfo:"
 22None.gif      IsErr=False
 23None.gifEnd Sub
 24None.gifPrivate Sub Class_Terminate()
 25None.gif      If IsObject(PageRs) Then
 26None.gif            PageRs.Close
 27None.gif            Set PageRs=Nothing
 28None.gif      End If
 29None.gif      Erase TempA
 30None.gif      Erase TempB
 31None.gifEnd Sub
 32None.gif'----------------------------------------------------------
 33None.gif'//获取当前页码
 34None.gifPublic Property Let CurrentPage(Val)
 35None.gif      CurrPage=Val 
 36None.gifEnd Property
 37None.gifPublic Property Get CurrentPage()
 38None.gif      CurrentPage=CurrPage
 39None.gifEnd Property
 40None.gif'//获取每页显示条数
 41None.gifPublic Property Let PageNum(Val)
 42None.gif      PageN=Val
 43None.gifEnd Property
 44None.gifPublic Property Get PageNum()
 45None.gif      PageNum=PageN
 46None.gifEnd Property
 47None.gif'//获取URL
 48None.gifPublic Property Let Url(Val)
 49None.gif      UrlStr=Val
 50None.gifEnd Property
 51None.gifPublic Property Get Url()
 52None.gif      Url=UrlStr
 53None.gifEnd Property
 54None.gif'//获取模板
 55None.gifPublic Property Let Temp(Val)
 56None.gif      TempStr=Val
 57None.gifEnd Property
 58None.gifPublic Property Get Temp()
 59None.gif      Temp=TempStr
 60None.gifEnd Property
 61None.gif'------------------------------------------------------------
 62None.gif
 63None.gifPublic Sub Exec(Sql,ConnObj)
 64None.gif      On Error Resume Next
 65None.gif      Set PageRs=Server.CreateObject("ADODB.RecordSet")
 66None.gif      PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高
 67None.gif      PageRs.PageSize = PageN '定义分页记录集每页显示记录数
 68None.gif      PageRs.Open Sql,ConnObj,0,1
 69None.gif      If Err.Number<>0 Then
 70None.gif        Err.Clear
 71None.gif     PageRs.Close
 72None.gif     Set PageRs=Nothing
 73None.gif        ErrInfo=ErrInfo&"建立或打开记录集错误dot.gif"
 74None.gif     IsErr=True
 75None.gif     Response.Write ErrInfo
 76None.gif     Response.End
 77None.gif      End If
 78None.gif      TotalRecord=PageRs.RecordCount'//如果为0呢?
 79None.gif      If TotalRecord>=1 Then
 80None.gif      '----------------------------------------------------------------------------开始
 81None.gif      '//计算总页数,Ps,为什么不用PageRs.PageCount呢?
 82None.gif      'If TotalRecord Mod PageN=0 Then
 83None.gif        'TotalPage=PageRs.RecordCount\PageN
 84None.gif      'Else
 85None.gif        'TotalPage=PageRs.RecordCount\PageN
 86None.gif     'TotalPage=Abs(Int(TotalPage))
 87None.gif      'End If
 88None.gif   TotalPage=PageRs.PageCount
 89None.gif      '//处理当前接收页码,默认的为1,所以不是数字类型的都会为1
 90None.gif      If IsNumeric(CurrPage) Then
 91None.gif         CurrPage=CLNg(CurrPage)
 92None.gif         If CurrPage<1 Then CurrPage=1
 93None.gif      If CurrPage>TotalPage Then CurrPage=TotalPage
 94None.gif      Else
 95None.gif            '//Dim M:M="":IsNumeric(M)=True
 96None.gif         CurrPage=1
 97None.gif      End If
 98None.gif      '---------------------------------------------------------------------------结束
 99None.gif      Else
100None.gif         TotalPage=0
101None.gif         CurrPage=1
102None.gif      End If
103None.gif      '//
104None.gif      PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头
105None.gif      PageRs.PageSize=PageN
106None.gifEnd Sub
107None.gifPrivate Sub Init()
108None.gif      'Private TempA(10)
109None.gif      TempA(1)="{N1}" '//首页
110None.gif      TempA(2)="{N2}"'//上一页
111None.gif      TempA(3)="{N3}"'//下一页
112None.gif      TempA(4)="{N4}"'//尾页
113None.gif      TempA(5)="{N5}"'//当前页码
114None.gif      TempA(6)="{N6}"'//页码总数
115None.gif      TempA(7)="{N7}"'//每页条数
116None.gif      TempA(8)="{N8}"'//文章总数
117None.gif      TempA(9)="{L}"'//循环标签开始
118None.gif      TempA(10)="{N}"'//循环内单标签:页码
119None.gif      TempA(11)="{L/}"'//循环标签结束
120None.gif      'Private TempB(8)
121None.gif      TempB(1)="首页"
122None.gif      TempB(2)="上一页"
123None.gif      TempB(3)="下一页"
124None.gif      TempB(4)="尾页"
125None.gif      TempB(5)=CurrPage'//当前页码
126None.gif      TempB(6)=TotalPage'//页码总数
127None.gif      TempB(7)=PageN'//每页条数
128None.gif      TempB(8)=TotalRecord'//文章总数
129None.gifEnd Sub
130None.gifPublic Sub Show(Style)
131None.gif      If IsErr=True Then
132None.gif        Response.Write ErrInfo
133None.gif     Exit Sub
134None.gif      End If
135None.gif
136None.gif      Call Init()
137None.gif      Select Case Style
138None.gif      Case 1
139None.gif         Response.Write StyleA()
140None.gif      Case 2
141None.gif         Response.Write StyleB()
142None.gif      Case 3
143None.gif         Response.Write StyleC()
144None.gif      Case 4
145None.gif         Response.Write StyleD()
146None.gif      Case Else
147None.gif         ErrInfo=ErrInfo&"不存在当前样式dot.gif"
148None.gif      Response.Write ErrInfo
149None.gif      End Select
150None.gifEnd Sub
151None.gifPublic Function ShowStyle(Style)
152None.gif      If IsErr=True Then
153None.gif        ShowStyle=ErrInfo
154None.gif     Exit Function
155None.gif      End If
156None.gif
157None.gif      Call Init()
158None.gif      Select Case Style
159None.gif      Case 1
160None.gif         ShowStyle= StyleA()
161None.gif      Case 2
162None.gif         ShowStyle= StyleB()
163None.gif      Case Else
164None.gif         ErrInfo=ErrInfo&"不存在当前样式dot.gif"
165None.gif  ShowStyle=ErrInfo
166None.gif      End Select
167None.gifEnd Function
168None.gif
169None.gifPrivate Function StyleA()
170None.gif'首页 上一页 下一页 尾页  本页为第1/20页,共20页,每页10条,文章总数200条
171None.gif'//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页
172None.gif'//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
173None.gifIf IsEmpty(TempStr) Then
174None.gif      ErrInfo=ErrInfo&"模板为空dot.gif"
175None.gif      StyleB=ErrInfo
176None.gif      Exit Function
177None.gifEnd If
178None.gifDim M
179None.gifIf TotalPage>1 Then
180None.gif      If CurrPage>1 Then
181None.gif        M="<a href='"&UrlStr&"Page=1'>"&"首页"&"</a>"
182None.gif     TempStr=Replace(TempStr,"{N1}",M)
183None.gif     M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"上一页"&"</a>"
184None.gif     TempStr=Replace(TempStr,"{N2}",M)
185None.gif     If CurrPage<TotalPage Then
186None.gif       M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"
187None.gif    TempStr=Replace(TempStr,"{N3}",M)
188None.gif    M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"
189None.gif          TempStr=Replace(TempStr,"{N4}",M)
190None.gif        Else
191None.gif       TempStr=Replace(TempStr,"{N3}","下一页")
192None.gif    TempStr=Replace(TempStr,"{N4}","尾页")
193None.gif     End If
194None.gif      Else
195None.gif        TempStr=Replace(TempStr,"{N1}","首页")
196None.gif     TempStr=Replace(TempStr,"{N2}","上一页")
197None.gif        M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"
198None.gif     TempStr=Replace(TempStr,"{N3}",M)
199None.gif     M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"
200None.gif        TempStr=Replace(TempStr,"{N4}",M)
201None.gif      End If
202None.gifElse
203None.gif      TempStr=Replace(TempStr,"{N1}","首页")
204None.gif      TempStr=Replace(TempStr,"{N2}","上一页")
205None.gif      TempStr=Replace(TempStr,"{N3}","下一页")
206None.gif      TempStr=Replace(TempStr,"{N4}","尾页")
207None.gifEnd If
208None.gifT=TempStr
209None.gifT=Replace(T,"{N8}",TotalRecord)
210None.gifT=Replace(T,"{N6}",TotalPage)
211None.gifT=Replace(T,"{N5}",CurrPage)
212None.gifT=Replace(T,"{N7}",PageN)
213None.gifTempStr=T
214None.gifStyleA=TempStr
215None.gifEnd Function
216None.gif
217None.gifPrivate Function StyleB()
218None.gif'首页 |< 1 2 3 4 5 6 7 >| 尾页
219None.gif'//标签:{N1} {N2} {L}{N}{L/}{N3}{N4}
220None.gifIf IsEmpty(TempStr) Then
221None.gif      ErrInfo=ErrInfo&"模板为空dot.gif"
222None.gif      StyleB=ErrInfo
223None.gif      Exit Function
224None.gifEnd If
225None.gifDim ForceNum,BackNum'//当前页的前面和后面显示个数
226None.gifForceNum=5
227None.gifBackNum=4
228None.gifDim M
229None.gif'//首页
230None.gifM="<a href='"&UrlStr&"Page=1'>"&TempB(1)&"</a>"
231None.gifTempStr=Replace(TempStr,"{N1}",M)
232None.gif'//尾页
233None.gifM="<a href='"&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"
234None.gifTempStr=Replace(TempStr,"{N4}",M)
235None.gif'//前一页
236None.gifM="|<"
237None.gifIf CurrPage-1>=1 Then
238None.gif      M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"
239None.gifEnd If
240None.gifTempStr=Replace(TempStr,"{N2}",M)
241None.gif'//后一页
242None.gifM=">|"
243None.gifIf CurrPage+1<=TotalPage Then
244None.gif      M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"
245None.gifEnd If
246None.gifTempStr=Replace(TempStr,"{N3}",M)
247None.gif'//取出循环标签
248None.gifDim N1,N2,N3,N4,N5,N6
249None.gifIf InStr(TempStr,"{L}")>0 Then
250None.gif      N1=InStr(TempStr,"{L}")
251None.gifEnd If
252None.gifIf InStr(TempStr,"{L/}")>0 Then
253None.gif      N2=InStr(TempStr,"{L/}")
254None.gifEnd If
255None.gifIf N2<=N1 Then
256None.gif      ErrInfo=ErrInfo&"循环标签出错dot.gif"
257None.gif      StyleB=ErrInfo
258None.gif      Exit Function
259None.gifEnd If
260None.gifN3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板
261None.gifN4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板
262None.gifN4=Replace(N4,"{L/}","")
263None.gif'//页码列表
264None.gifDim FirstPageNum,LastPageNum
265None.gifIf CurrPage-ForceNum<=1 Then
266None.gif   FirstPageNum=1
267None.gif   PageList=""
268None.gifElse
269None.gif   FirstPageNum=CurrPage-ForceNum
270None.gif   PageList="dot.gif dot.gif"
271None.gifEnd If
272None.gifIf CurrPage+BackNum>=TotalPage Then
273None.gif   LastPageNum=TotalPage
274None.gif   PageList_2=""
275None.gifElse
276None.gif   LastPageNum=CurrPage+BackNum
277None.gif   PageList_2="dot.gif dot.gif"
278None.gifEnd If
279None.gifDim I
280None.gifFor I=FirstPageNum To LastPageNum
281None.gif      If I=CurrPage Then
282None.gif        N5=Replace(N4,"{N}","<b>"&I&"</b>")
283None.gif     N6=N6&N5
284None.gif      Else
285None.gif        M="<a href='"&UrlStr&"Page="&I&"'>"&I&"</a>"
286None.gif     N5=Replace(N4,"{N}",M)
287None.gif     N6=N6&N5
288None.gif      End If
289None.gifNext
290None.gifTempStr=Replace(TempStr,N3,N6)
291None.gifStyleB=TempStr
292None.gifEnd Function
293None.gif
294None.gifPrivate Function StyleC()
295None.gif'首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
296None.gif'//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页
297None.gif'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
298None.gifDim T
299None.gifT=StyleB()
300None.gif'//前十页
301None.gifM="|<<"
302None.gifIf CurrPage-10>=1 Then
303None.gif      M="<a href='"&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"
304None.gifEnd If
305None.gifT=Replace(T,"{N9}",M)
306None.gifM=">>|"
307None.gifIf CurrPage+10<=TotalPage Then
308None.gif      M="<a href='"&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"
309None.gifEnd If
310None.gifT=Replace(T,"{N10}",M)
311None.gifStyleC=T
312None.gifEnd Function
313None.gif
314None.gifPrivate Function StyleD()
315None.gif'//此风格在StyleC的基础上修改
316None.gif'//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
317None.gif'//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
318None.gif'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
319None.gifDim T
320None.gifT=StyleC()
321None.gifT=Replace(T,"{N8}",TotalRecord)
322None.gifT=Replace(T,"{N6}",TotalPage)
323None.gifT=Replace(T,"{N5}",CurrPage)
324None.gifT=Replace(T,"{N7}",PageN)
325None.gifStyleD=T
326None.gifEnd Function
327None.gif
328None.gifEnd Class
329None.gif%>
330None.gif
这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10
万条数据的分页时间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换成变量

这个类可以扩展的地方很多,不错哦.
另外还有其他一些参数可以设置的.

转载于:https://www.cnblogs.com/MaxIE/archive/2006/11/20/565679.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值