一、创建分页类的目标 tWy<9TF
在写之前,我曾想过,我究竟要写怎么样一个类,回想起以前写分页过程的时候,最烦的莫过于每次都要写哪一段复杂的分页代码,最大的烦恼每次都是仅仅几个变量名的不同。所以第一个要实现的就是要把这个封装起来,第二个就是要把分页的导航条也封装起来,第三个,不习惯哪些把数据显示部分也封装起来的方法,这不是方便编程,对与哪些对显示效果每次都不同的用户来说,比自己写分页还要麻烦。所以我的目地就是对RecordSet进行一些简单的封装。 H s 3*OhK\
{dH<Un(4Z
二、创建过程 MPw7!G(qj
所以我写的第一个属性,就是返一个经过处理的RecordSe !q1^X% a
[Cr~gd+q
+m},c-,=$w
Public Property Get GetRs() DFH6.0UW
Set XD_Rs=Server.createobject(adodb.recordset) Dy'l]vN$
XD_Rs.PageSize=PageSize d|HM
XD_Rs.Open XD_SQL,XD_Conn,1,1 _^A
NJ7
If not(XD_Rs.eof and XD_RS.BOF) Then {;~iq
If int_curpage>XD_RS.PageCount Then zIm!8a
int_curpage=XD_RS.PageCount =5#Jsn?U
End If X+BSneu
XD_Rs.AbsolutePage=int_curpage ml/O
End If U6 R4UK
Set GetRs=XD_RS O/~^}8TLL
End Property F'Vl\qPt
Kt0Tuj@CY
^@> Qiy
这个属性的作用是更据指定RecordSet 的当前面,并到指针指向当前页的第一条记录,这个应该就是整个类的完成分页的核心了,当然,其中的一些参数是靠其它的属性来获取,所以这里顺便介绍一个这个类所要的基本参数 )SLs
[
Q*(C)/ QW
}Elce}
============================================= _QCI<|A
GetConn 得到数据库连接 fL:Fn"Nv
nJ@hzK.
============================================= DgP%Q
Public Property Let GetConn(obj_Conn) v%Xe)D
Set XD_Conn=obj_Conn m@?e
<$
End Property xo+z[OIlF
bS6Yi)p
============================================= a06q-3zw
GetSQL 得到查询语句 z#/*LP#oY
(o\~2e:
============================================== )UUe5H6Hd0
Public Property Let GetSQL(str_sql) JR)rp3o-
XD_SQL=str_sql ]vErF=[U,
End Property g&wQ^
55\mQ|.Jn
=============================================== xx8na8
PageSize 属性 q"oNB-bz
设置每一页的分页大小 j&5Xjl>4
=============================================== [l:.Q?? )|
Public Property Let PageSize(int_PageSize) jyr#e
If IsNumeric(Int_Pagesize) Then vS#]RW&j
XD_PageSize=CLng(int_PageSize) 4N&}hOM'S
Else >d\I*"C+d
str_error=str_error & PageSize的参数不正确 UJ:B:hh''
ShowError() 5c8x:
e@
End If "N_?yA#(j
End Property <Z;BB)I&C`
2hP8ZfvIR
Public Property Get PageSize 0b'R5I.M
If XD_PageSize= or (not(IsNumeric(XD_PageSize))) Then 7&1: ]{_
PageSize=10 {{\HU0g>&
Else ;q2T*4NN
PageSize=XD_PageSize dGe
End If 1wt]J!hgV
End Property rB]/N,R
rf@81Ds
%<t/xAge
以上几个是在使用类的过程必需要指定的参数,曾经我在写属性的时候对每个传入的参数加上IsObject(obj_conn)等判断,为的是类的健壮,但是后来想来想去,这个对与ASP来说没有必要,不加还能加快点速度,至于为什么这样,我想各位在使用过程中也会发现,加还不如不加。这也是我经过了思想斗争以后才去掉了,只保留了一些必要的验证。 ^(R
gSMuT`
一个参数就是当前页的获得,在程序中我用int_curpage来标识,这个的话放在类的创建过程中获得在好也没有了 /_\4(vvf
|(5=4j]
)SuJK.IF
======================== 3Daq5(fLP
设定一些参数的黙认值 &7LfNN`
======================== ??PpHBJ')
XD_PageSize=10 设定分页的默认值为10 rH,N.H#]
======================== b%(0AL
获取当前面的值 yr?\YKV)I
======================== iKwVYL
If request(page)= Then (!s[~O 6
int_curpage=1 %~~Q XH\
ElseIf not(IsNumeric(request(page))) Then _ sd?l
int_curpage=1 k>"I!&#g
ElseIf CInt(Trim(request(page))) 6c :$[owC
.;'xm_Gw<
到这里这个类分的功能基本已经实现了,只要在调用这个类的页面的URL后面加上page=n,它就会显示第n页的内容了,所以接下去要做的就是创建一个数据导航条了,我把它设计为类似以面的形式 \] K-<&f
!k:j+h/
M%/D:0
9 3[1] [2] [3] [4] [5] [6] [7] [8] 4 :页次:1/8页 共51条记录 7条/每页 ]+AI:
IF=rD-x
?4_;9MkN
在页面里通过调用ShowPage()的方法显示出来,ShowPage可以在GetRS以后的任意位置调用,也可以调用多次 vjpe'zx
(ZYOm
hf[K\aAk
{q^KlSjm
Public Sub ShowPage() m<E7cY3mX
Dim str_tmp !E%!,
int_totalRecord=XD_RS.RecordCount Po5}Vh
If int_totalRecord N|DY)W
;(V=disU/
If Int_curpage>int_Totalpage Then &("?6%GC
int_curpage=int_TotalPage m5S/T\,X
End If &IcDUr]L
A)xI.Q6
===================================================== HN:{rAIfc
显示分页信息,各个模块根据自己要求更改显求位置 ]n{2cPx5d
===================================================== 0t) IWD
response.write z, OMR`W
str_tmp=ShowFirstPrv 显示首页、前一页 t/3veDh@
response.write str_tmp ?F-,4Ox{/
str_tmp=showNumBtn 数字导航 | c;S'36
response.write str_tmp E_++yK^=
str_tmp=ShowNextLast 下一页、末页 V#=N?p
response.write str_tmp kz#DBh!&
str_tmp=ShowPageInfo oR+Fn}mG
response.write str_tmp IflpM ]
response.write 0xC!d-VIJ
end Sub ?B-aj
)T>a|.
到这里类的功能才算完整(为了节省版面,我有些方法没有放上去,再下面附上全部完整代码)写一个简单页面测试一下 `p!.K9r7
WYq, i}S
k2xjcrg
Iv{}U\ u
iB\d`NUf
^!A{ 4NV
#############类调用样例################# KmMt:^9
创建对象 D,NjDIG8
Set mypage=new xdownpage C}M0KDF
得到数据库连接 zP5H TEz
mypage.getconn=conn C4b3ZcD2
sql语句 ~ WVrtY Ju
mypage.getsql=select * from [test] order by id asc y_\d[
设置每一页的记录条数据为5条 sUg7
mypage.pagesize=5 [x@iqFO9
返回Recordset ?f a/}|T
set rs=mypage.getrs() p}C3<[Nk
显示分页信息,这个方法可以,在set rs=mypage.getrs()以后,可在任意位置调用,可以调用多次 b+w|3bQa
mypage.showpage() akaQ6DIdG
~V (WD;Mk
显示数据 Jr#ptf"Wu
Response.Write() r|
YuHm
for i=1 to mypage.pagesize :
G<