分页控制
利用查询所得之资料要如何作分页呢?请指导一下吧!
下面我从PC-NET那边节录下来的,是由东东所撰写的 ==============================================
如何做分页控制
很多网友都有自己开发線上讨论区和留言版的经验,也有的人一开始就使用别人开发好的程
式,但是有些人会因为别人开发的程式不够完美而兴起了想修改程式的念头,其中很多网友的
最大的问题就是不知道如何将资料库的资料作分页控制,大家看到很多简易型的讨论区和留
言版因为没有作分页控制造成使用者在阅读时的困扰,所以今天笔者将告诉大家如何完成这
项技巧,想当初笔者也是被这个问题烦了好一段时间,书上的范例又少之又少,所以希望今天
这个范例能带给大家一点小小的帮助,下面这段程式笔者仅带出显示资料和分页控制的程式
段,至於开启资料库的动作就交给大家去完成,假设这个程式叫做Devide.asp
Devide.asp
'由上一页还是下一页的按钮所传回来的Action参数来决定要往下一页还是回上一页
<% ACTION = Request.Querystring("ACTION") %>
'由上一页还是下一页的按钮所传回来的Action参数来决定目前所在的页次
<% PAGE = CInt(Request.Querystring("PAGE")) %>
由上一页还是下一页的按钮所传回来的Action参数来决定要显示资料为哪几笔
<% RCOUNT = CInt(Request.Querystring("RCOUNT")) %>
如果是第一次进来就一定显示第一页的资料
<% If RCOUNT = "" Then %>
<% RCOUNT = "0" %>
<% End If %>
<% HOWMANY = 10 %>
<% '** 定义每一页显示资料笔数,CmdShowEntries是笔者所开启的资料库集合
CmdShowEntries.PageSize = HOWMANY
%>
如果是按下下一页的按钮的话
<% If ACTION = "FORWARD" Then %>
先将目前所在页数加一
<% PAGE = PAGE + 1 %>
再将目前显示的资料笔数加10
<% RCOUNT = RCOUNT + HOWMANY %>
这边就有点技巧了,比如你是从第一页跳到第二页,你应该先将第1到第10笔资料略过
只显示第11笔到第20笔资料,因为原本在第一页的时候Rcount为0,加上10之後就等
於10,而这10笔资料就是你所要略过的,同样的,如果你是从第二页跳往第三页的话,
你必须略过第1笔到第20笔的资料,从第21笔资料开始显示
CmdShowEntries.MoveNext就是在执行这个略过的动作
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
相反的如果是回上一页的话
<% If ACTION = "BACK" Then %>
先将目前所在页数减一
<% PAGE = PAGE - 1 %>
再将目前显示的资料笔数减10
<% RCOUNT = RCOUNT - HOWMANY %>
如果不是在第一页的话(RCOUNT <> 0)才要执行资料略过的动作
<% If RCOUNT <> 0 Then %>
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
<% End If %>
同样的如果Rcount = 0就表示在第一页
<% If RCOUNT = "0" Then %>
<% PAGE = 1 %>
<% End If %>
如果资料库裡都没资料的话就直接显示网页结尾
<% If CmdShowEntries.RecordCount = 0 Then %>
</BODY>
</HTML>
<% Response.End %>
<% End If %>
<div align="left"><left>
如果资料库裡有资料就准备要显示资料了
<% y = 0 %>
<% while NOT CmdShowEntries.EOF %>
这边的内容就交给读者自己去完成了,看你想将资料库的内容以何种外观呈现
<% CmdShowEntries.MoveNext %>
这边是第二个小技巧,当你印完10笔资料之後是不是应该停止了呢?没错,我们
用到一个变数Y来控制,先定义Y等於0,每印一笔资料就将Y加一,当Y等於10的
时候先看看资料库是不是还有资料,如果还有资料就将剩下的资料通通略过,就是
CmdShowEntries.MoveNext啦!!
<% y = y + 1 %>
<% if y = HOWMANY then %>
<% while NOT CmdShowEntries.EOF %>
<% CmdShowEntries.MoveNext %>
<% wend %>
<% end if %>
<% wend%>
</center></div>
准备显示上一页和下一页的按钮囉
<div align="left"><left>
<table border="0" width="400">
<tr>
<td width="200"><% If RCOUNT > 0 Then %>如果不是在第一页
就显示上一页的按钮,並将预设的参数传回
<form method="PUT" action="Devide.asp">
<input type="hidden" name="ACTION" value="BACK">
<input type="hidden" name="RCOUNT" value="<% =RCOUNT %>">
<input type="hidden" name="PAGE" value="<% =PAGE %>">
<p><font face="Arial"><input type=image src=http://cfan.net.cn/info/images/back.gif
onclick="submit">
</font></p>
</form>
<% End If %>
</td>
<td width="200"><% If PAGE = CmdShowEntries.PageCount Then %>
<% Else %>如果不是在最後一页就显示下一页的按钮,並将预设的参数传回
<form method="PUT" action="Devide.asp">
<input type="hidden" name="ACTION" value="FORWARD">
<input type="hidden" name="RCOUNT" value="<% =RCOUNT %>">
<input type="hidden" name="PAGE" value="<% =PAGE %>">
<p><font face="Arial"><input type=image src=http://cfan.net.cn/info/images/next.gif
onclick="submit">
</font></p>
</form>
<% End If %>
</td>
</tr>
怎麽样大家懂了吗?
其实分页控制方式有很多种,笔者只是拿这个简单的例子来作示范,应为我觉得这个范
例最容易理解而且弹性又大,比如说你今天还想多加几个按钮,像是回第一页,到最後
一页,你可以这样写
<form method="PUT" action="Devide.asp">
<input type="hidden" name="ACTION" value="LAST">
<input type="hidden" name="RCOUNT"
value="<% =(CmdShowEntries.PageCount - 1)*10%>">
<input type="hidden" name="PAGE"
value="<% =CmdShowEntries.PageCount%>">
<p><font face="Arial"><input type="submit" value="最末页">
</font></p></form>
<% End If %> </td>
<td width="200">
<form method="PUT" action="Devide.asp">
<input type="hidden" name="RCOUNT" value="0">
<input type="hidden" name="PAGE" value="1">
<p><font face="Arial"><input type="submit" value="第一页"></font>
</p>
</form>
然後在原本判断是要回上一页还是下一页的程式段中加上
<% If ACTION = "LAST" Then %>表示到最後一页
<% PAGE = CInt(Request.Querystring("PAGE")) %>
<% RCOUNT = CInt(Request.Querystring("RCOUNT")) %>
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
另外一种显示分页控制的方式更是经常看到,这种方式就是在网页底部秀出数字或第
几页的超连结,使用者按下按钮之後就会到指定的页数,利用上面的程式也可以做到
相同的功能,你只要在网页底部加上
<%fOR I = 1 TO (CmdShowEntries.PageCount - 1)
if I <> CInt(PAGE) THEN%>
<a href="Devide.asp?Action=select&Page=<%=I>
&RCount=<%=(I-1)*10%>"><%=I%></a>
<% END IF
NEXT %>
然後在原本判断是要回上一页还是下一页的程式段中加上
<% If ACTION = "select" Then %>
<% PAGE = CInt(Request.Querystring("PAGE")) %>
<% RCOUNT = CInt(Request.Querystring("RCOUNT")) %>
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
|