用Dreamweaver和ASP实现分页技术的参考
今天心情有点激动,想把"关于用DW+ASP实现分页技术的参考"分享给用DW+ASP做网页的朋友们.去掉只有"第一页,前一页,下一页,最后一页"的小痛苦 此效果最后的显示是:第N页[共*页] <<1 2 3 4 5 6 7 8 9 10 >>。 : U1 d+ {( B- X0 V7 W7 I
用DW+ASP做网页时,在绑定记录集后,代码页里马上出现以下代码: $ j4 K) N% j0 P; Z6 h/ k$ H+ t
0 O9 P! q- [7 L- r
<% 4 p7 q0 x4 B% y9 ^
Dim Recordset1 ! R) B3 X* o1 ?2 @1 e" V Q
Dim Recordset1_numRows
' e5 J/ m0 `& m" O' g
! s3 b; m* }: Q% gSet Recordset1 = Server.CreateObject("ADODB.Recordset")
$ K) Y2 ^, G1 M& T) U, IRecordset1.ActiveConnection = MM_数据库名_STRING 4 t, J7 i" B* b2 U9 S! k
Recordset1.Source = "SELECT * FROM 表名" 0 b! i2 y; i% L& c& X" ~! b5 T
Recordset1.CursorType = 0 6 z- R& C1 E' o' {& X7 P
Recordset1.CursorLocation = 2
3 u- X$ u3 G' W. n2 @- e; \, URecordset1.LockType = 1
3 G( l4 l1 e& ^7 c0 jRecordset1.Open() . }1 ~+ n1 h! |! X, I
+ C" [# ~; \9 _) _$ M& ZRecordset1_numRows = 0
+ X; |6 t4 R4 P, o8 F$ w$ l%> 8 x8 X( R+ _) F# v' c, ?; c# K/ ?
现在我们要来对代码做点修改,请在上面代码中修改为如下的代码:
5 U- ~ u" J; q+ v<%
/ Y6 E" j* n" }# dDim I + [- l- R4 e1 U6 w( @
Dim RPP 1 ~1 R9 N2 D6 k1 P/ V
Dim PageNo * u8 k6 w7 l3 B3 s6 C+ E
I=1 9 ]" w; i* T7 d+ Q
RPP=50
8 \9 ^$ \6 b+ r+ c4 o4 mPageNo=CInt(Request("PageNo"))
! V' P$ w" R& B’上面即是新插入的, 2 L8 @; r5 q7 \) Q9 R
Dim Recordset1 3 I0 a8 R9 c2 y7 q! d
Dim Recordset1_numRows
% r( ^8 g) R8 a' W- [! PSet Recordset1 = Server.CreateObject("ADODB.Recordset")
7 K5 E8 U7 g5 R9 b- a" o6 xRecordset1.ActiveConnection = MM_数据库名_STRING
3 _6 v' r G' ZRecordset1.Source = "SELECT * FROM 数据库名"
+ q9 }- O1 X& e) h, C; YRecordset1.CursorType = 1 ’将上面代码的0改为1. ! x f: y! E' |, t+ G2 k. h8 E
Recordset1.CursorLocation = 2 " ?% ]$ F7 e7 E9 r7 l: l. I' h; d
Recordset1.LockType = 1
9 p8 i, D4 l( k5 C6 FRecordset1.Open()
/ o9 U# U* }- @, @% Y$ T* NRecordset1_numRows = 0 ’再在此行的下一行开始加入如下代码: / O f: Q' |! ~1 _) Q
Recordset1.PageSize=RPP 9 [7 }$ X# O/ O4 l0 F3 Y
If PageNo<=0 Then PageNo=1
) Q: K0 O' N7 l$ c3 uIf PageNo>Recordset1.PageCount Then PageNo=Recordset1.PageCount 8 R( G P5 w8 a- x) \7 }, }0 l
Recordset1.AbsolutePage=PageNo
- l- o9 g/ h; J1 O- ^, USub ShowPageInfo(tPageCount,cPageNo) 4 c5 G9 i/ A) V1 ?' H; k
Response.Write "第"&cPageNo&"页[共"&tPageCount&"页]"
, z O9 `) V$ O5 b& h6 b7 p7 W" uEnd Sub * x( J. u# M* A3 F% T; m
Sub ShowPageNavi(tPageCount,cPageNo) 5 J/ Q C- F! `0 I5 J
If cPageNo<1 Then cPageNo=1 5 N* O8 R6 q; e8 g
If tPageCount<1 Then tPageCount=1
5 @% P6 r$ |9 Y2 NIf cPageNo>tPageCount Then cPageNo=tPageCount + P p# T6 ?, R8 d5 D
Dim NaviLength ! ~" l7 P3 R& k: c. g( n/ `: f
NaviLength=10 ’NaviLength:显示的数字链接个数 ( v5 a+ V) j, w' `. Q |8 v
Dim I,StartPage,EndPage
* `! J# U# L# f( [& ?StartPage=(cPageNo\NaviLength)*NaviLength+1
& v/ P7 p9 O' M3 JIf (cPageNo Mod NaviLength)=0 Then StartPage=StartPage-NaviLength 3 [) |8 d1 l2 C- ?$ w
EndPage=StartPage+NaviLength-1
' C1 L R- ?) P% A9 y7 A2 pIf EndPage>tPageCount Then EndPage=tPageCount
# @0 Z- E( N5 aIf StartPage>1 Then
' b" |( J% _+ o; m2 U# TResponse.Write "<a class=""pageNavi"" href=""?PageNo=" & (cPageNo-NaviLength) & """><<</a> " 5 X- V+ ?' ?( t3 h/ y4 c
Else 4 A! F3 W( X& P! Y) x+ R1 s0 N
Response.Write "<font color=""#CCCCCC""><<</font> " * j! |% g7 M4 E$ g& x! C1 q0 v j
End If
) W; T. S2 w6 s+ B0 CFor I=StartPage To EndPage " |. ?+ |8 m: U$ M/ k
If I=cPageNo Then 7 z4 C& `1 b6 \
Response.Write "<b>"&I&"</b>" " q E* F- l% ^+ w. d! d( B0 [6 N
Else
+ h. b) X8 j, Y% ?( rResponse.Write "<a class=""pageNavi"" href=""?PageNo=" & I & """>" & I & "</a>" 7 q$ h& R: F* w3 ~7 h
End If 8 j! e- X0 a$ Y8 t% u$ W+ y
If I<>tPageCount Then Response.Write " " 2 p! d! u2 P- _9 m2 _
Next
% a w( x7 C8 oIf EndPage<tPageCount Then
. o8 F; w1 r( E2 cResponse.Write " <a class=""pageNavi"" href=""?PageNo=" & (cPageNo+NaviLength) & """>>></a>" % X- y: q: f1 x3 Y6 F
Else - U; d) Y3 N& M& }& v
Response.Write " <font color=""#CCCCCC"">>></font> " 5 D7 m* D# Y4 C, A6 s' {; d1 q1 S3 w' L
End If . W/ w0 z7 a* f: n% f4 l. k
End Sub
v4 D, J$ y) d/ t5 e7 R%>
: \! W3 [2 m7 w8 j 上面代码中:RPP:指定每页显示的记录条数。即每页显示几条数据。
* }8 p8 N4 L& p3 G NaviLength:显示的数字链接个数,即10就为1 2 3 ...10的连接个数。
; M9 s# I" o" q: g 若要显示所有连接的页(个)数,你可以设置为:NaviLength=tPageCount。 0 `; s* Z) J4 r
这时代码已经差不多了,但还要在显示的地方(如表格)中加点代码才行吧,(要不然怎么显示,呵~~~)如我们插入一个2行3列的表格。 8 v z f) O5 Z* c% T: U6 z
1.将光标移在第一行第一列中,切换到代码中加入:<%=(PageNo-1)*RPP+I%> , s& g; D* s! Y! u/ ]* A% W# D
这个代码是显示序号用的。 " [4 `0 z* N0 F t& B$ X# F
2.右边2个单元格(当然你自己可以根据需要分更多的列)就是为你要显示的记录了。请分别从绑定的记录集中选中你要显示的字段拖放在相应的单元格中,(也可以选中后再点右下角的“插入”按钮)。这里我们就先拖2个进来如“编号”和“公司名称”。分别到1行第2个单元格和1行第3个单元格中。 3 J2 M* [ B! ^+ C
3.这个是个关键的,请将光标移到第一行任意单元格中,再来点选窗口底下的<tr>,这时你看看代码,<tr>....</tr>就被选中了。这时请在<tr>....</tr>的前面插入如下代码:
; R* |1 s# F( e; P) h<% 7 x/ W+ H3 _- [, A) q7 e
If Recordset1.EOF OR Recordset1.BOF Then ; ~% E; M, T; K$ b1 Z
Else - ^; A/ c' W6 q& z: l0 Q e# V
For I=1 To RPP
# e% }& o& u( W+ V% s+ f%>再在<tr>....</tr>之后插入如下代码:
8 Z; S7 E8 K8 h0 b<% $ \) n: `& u4 I c/ i0 e
Recordset1.MoveNext 7 P# G* k0 P/ X. z
If Recordset1.EOF OR Recordset1.BOF Then Exit For % y$ R- a$ }' y2 I" a
Next " Y3 d. Z( O" M! }2 r
End If
& U S- S& c1 w# k0 R E%> 5 W# z* I. i* q/ I% v$ _$ V
4.这是就完成表格的第一行的工作。下来也是关键,即分页的连接。光标在第2行第一个单元格中时在代码窗口插入:
! p5 z" ~4 W, q4 u% Z* \<% showPageInfo Recordset1.PageCount,PageNo %> - {7 g6 k& a3 f2 ?) N" G
的代码。右边的2个单元格将其合并,在代码中插入:
& x' Z2 o9 \ d7 ], y8 }<% showPageNavi Recordset1.PageCount,PageNo %> / u7 `% K6 a& V9 t l/ n
的代码。4 u) M q1 N6 }* V) m
5.大功告成!这时感快预览一下吧。。。。 / W/ x$ S9 M, C& j- _# Y( n3 S5 K
表格的全部代码如下:
* |$ E# X7 m. n7 S0 |7 p<table width="710" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#333333">
3 ^7 k* C7 ^9 I6 i$ X9 A" _<%
# L* P) M/ `8 R" h) }9 h" ^If Recordset1.EOF OR Recordset1.BOF Then
( n7 H* T2 P t( [Else ! N8 C. s; T" \) i! z8 K: q
For I=1 To RPP % g: d# q; K, x/ a: Q% k
%> 3 U! _$ }/ H- x3 E* D
<tr bgcolor="#FFFFFF">
- Q0 ?- W4 @. W<td width="30" align="center"><%=(PageNo-1)*RPP+I%></td>
# X8 |0 |4 P2 B8 F0 P' \9 Q# G<td><%=(Recordset1.Fields.Item("编号").Value)%></td> $ }5 M, d+ n! H! f- e
<td><%=(Recordset1.Fields.Item("公司名称").Value)%></td>
/ Q- B& E2 ~8 a) K- L1 ]</tr> / v* H. q: ]) K$ y+ X
<%
# Q0 R4 W/ S0 `2 e- }- b- H. ERecordset1.MoveNext
) p% E0 s8 P5 eIf Recordset1.EOF OR Recordset1.BOF Then Exit For 6 q! x) c9 F3 h, H) _- U
Next % v5 m( c0 ~) D; R, [ j
End If
: {6 A+ w& U1 _%> . a) p" m; Q, ~2 a' }
<tr bgcolor="#FFFFFF"> , l- l, [/ b3 R" P& g! n
<td colspan="3"><table width="100%" border="0" cellspacing="0" cellpadding="2">
. C2 B7 R8 H; N7 z4 q) ~& k3 {7 j6 M<tr bgcolor="#006699" class="w12"> ! c3 B# z0 ? J* F$ M' v* p; F
<td width="121" align="center"><% showPageInfo Recordset1.PageCount,PageNo %> : B2 z$ N X! A: q
</td> . X6 W. X; G3 k
<td width="573" align="center"> / P: I7 Q+ j* r, c: W9 P& C1 w
<% showPageNavi Recordset1.PageCount,PageNo %>
2 e, d1 ^" D8 [" \+ A+ c</td>
7 y; A. _ G+ i</tr> # P1 {( K- Z H9 {$ y+ U
</table></td>
% ~# \4 s# I, y- ?</tr>
& Y' v( w6 o& B$ J1 J</table>
2 Q- p/ I1 X* W9 ^6 Q8 ^* E 这时你去点应用程序中的“服务器行为”中的记录集,在代码中就显示为一下代码,也是我的原代码:
0 r: \) j0 y; G) x- h<% + T0 p9 v6 t3 @: y$ m
Dim I
7 d2 r5 y3 p. s; o2 aDim RPP’RPP:指定每页显示的记录条数, 2 E1 F6 V4 k4 C
Dim PageNo
, I. @ |1 @& y" g7 x* jI=1
2 Q! x3 v7 U1 [! v% uRPP=50
( u6 e! o+ g+ t2 V8 k$ rPageNo=CInt(Request("PageNo")) ! E5 ~) U# u* W+ [
Dim Recordset1 7 D" U* K7 Z( y; c
Dim Recordset1_numRows
: W# o2 x- \) U, h4 {: R7 mSet Recordset1 = Server.CreateObject("ADODB.Recordset")
# s |; F: O2 U4 Y9 ~/ zRecordset1.ActiveConnection = MM_数据库名_STRING
1 T- P4 ]& V Z( h3 A9 J$ }Recordset1.Source = "SELECT * FROM 表名 ORDER BY 编号 ASC"
! o( U2 @( g9 L. R+ f( kRecordset1.CursorType = 1
% E4 f8 f% G0 M1 f9 XRecordset1.CursorLocation = 2
/ T* T8 _1 h$ s4 B( _% W6 F! LRecordset1.LockType = 1
! \$ \3 Q; c7 v6 ?' |Recordset1.Open() : T; d; ]* K: _) |! G( i6 P" W
- h3 r1 s! S6 t
Recordset1_numRows = 0
9 G3 G! u" `5 y C$ j. U8 [6 R$ Y7 o. B$ bRecordset1.PageSize=RPP 3 ?" e1 B- a9 E5 H
If PageNo<=0 Then PageNo=1
X& d1 h* a) @" X/ {If PageNo>Recordset1.PageCount Then PageNo=Recordset1.PageCount
! F$ v) E# P2 A% T& y1 [! ?Recordset1.AbsolutePage=PageNo $ _9 G7 U4 j+ B" W4 D( c9 U
8 o8 q* T; m. O1 q( \3 R) P, i
Sub ShowPageInfo(tPageCount,cPageNo)
! X$ E+ L1 @! X4 p: BResponse.Write "第"&cPageNo&"页[共"&tPageCount&"页]" 7 V* f9 P4 c$ ~9 ^
End Sub
: r2 W4 O( n m2 B, Z' U F# V1 N% f& }! m- U1 C' s9 y7 j' J: a
Sub ShowPageNavi(tPageCount,cPageNo)
1 \' p4 d0 U, y/ Z1 ^4 D% j: K$ |If cPageNo<1 Then cPageNo=1
7 e5 }# k" m' D7 S4 I8 XIf tPageCount<1 Then tPageCount=1
( S- x0 H* D- ]# d, uIf cPageNo>tPageCount Then cPageNo=tPageCount 6 i% A' c1 k: U) H+ r- O0 k
Dim NaviLength $ o0 D' j/ V! Z6 o/ l, |$ v) o& |4 L
NaviLength=20 ’NaviLength:显示的数字链接个数 `$ G# b f2 v
Dim I,StartPage,EndPage & H( z, u/ ?* {
StartPage=(cPageNo\NaviLength)*NaviLength+1 ! S* E7 L [( V5 ]. u0 N
If (cPageNo Mod NaviLength)=0 Then StartPage=StartPage-NaviLength 2 o7 a1 E l. ~
EndPage=StartPage+NaviLength-1 * T T0 m: W4 v! A, W
If EndPage>tPageCount Then EndPage=tPageCount 0 ?, C3 _' p! x' H- n+ H9 K! j
If StartPage>1 Then
/ Q7 |" Z/ g4 w+ C" V1 ^2 kResponse.Write "<a class=""pageNavi"" href=""?PageNo=" & (cPageNo-NaviLength) & """><<</a> "
" f( U/ t; h2 V' z- ]6 @Else 1 @' Z7 P4 Y& @ ?5 j
Response.Write "<font color=""#CCCCCC""><<</font> " ' s2 }) s6 N* U5 ? S4 e% V
End If 2 i+ u3 [2 O" r% T: Y1 A8 B
For I=StartPage To EndPage / C4 u3 ~* D/ g* V
If I=cPageNo Then 4 O5 `6 u# T! X+ y: {: G
Response.Write "<b>"&I&"</b>" - O- Z' {1 O8 O- F3 ]
Else ( F/ d8 C1 B$ H$ N0 p9 ]: Q% [
Response.Write "<a class=""pageNavi"" href=""?PageNo=" & I & """>" & I & "</a>" : ~' S* F4 L, N4 B1 I
End If
. z- P9 }; L& ^* F M4 gIf I<>tPageCount Then Response.Write " "
' R2 Y/ i$ ~ p' |9 I% t; e1 BNext
: X) _% K: B1 p8 \- D# U% OIf EndPage<tPageCount Then * @" U- v& G7 k* v
Response.Write " <a class=""pageNavi"" href=""?PageNo=" & (cPageNo+NaviLength) & """>>></a>"
- f) j7 G( h5 xElse # Z1 J: l. M* \! F0 ^
Response.Write " <font color=""#CCCCCC"">>></font> " 9 U3 h8 v# ], G+ j& U- o
End If / Y0 s7 u5 X$ v. i _6 p/ ^: j
End Sub / J' H4 b( Q1 Z. H; \ H/ [
* m8 l& c, v4 K, ]%> 4 T$ Q. x/ w7 C2 O9 E
不过有一个缺点就是:如当你想找99页时点>>9次,要是有一个输入框,输入99后回车就到99就完美了。不知在DW+ASP中再怎么修改一下就能达到呢?期待。。。。