|
分頁(yè)控制
利用查詢所得之資料要如何作分頁(yè)呢?請(qǐng)指導(dǎo)一下吧!
下面我從PC-NET那邊節(jié)錄下來(lái)的,是由東東所撰寫的 ==============================================
如何做分頁(yè)控制
很多網(wǎng)友都有自己開(kāi)發(fā)線上討論區(qū)和留言版的經(jīng)驗(yàn),也有的人一開(kāi)始就使用別人開(kāi)發(fā)好的程
式,但是有些人會(huì)因?yàn)閯e人開(kāi)發(fā)的程式不夠完美而興起了想修改程式的念頭,其中很多網(wǎng)友的
最大的問(wèn)題就是不知道如何將資料庫(kù)的資料作分頁(yè)控制,大家看到很多簡(jiǎn)易型的討論區(qū)和留
言版因?yàn)闆](méi)有作分頁(yè)控制造成使用者在閱讀時(shí)的困擾,所以今天筆者將告訴大家如何完成這
項(xiàng)技巧,想當(dāng)初筆者也是被這個(gè)問(wèn)題煩了好一段時(shí)間,書(shū)上的范例又少之又少,所以希望今天
這個(gè)范例能帶給大家一點(diǎn)小小的幫助,下面這段程式筆者僅帶出顯示資料和分頁(yè)控制的程式
段,至於開(kāi)啟資料庫(kù)的動(dòng)作就交給大家去完成,假設(shè)這個(gè)程式叫做Devide.asp
Devide.asp
'由上一頁(yè)還是下一頁(yè)的按鈕所傳回來(lái)的Action參數(shù)來(lái)決定要往下一頁(yè)還是回上一頁(yè)
<% ACTION = Request.Querystring("ACTION") %>
'由上一頁(yè)還是下一頁(yè)的按鈕所傳回來(lái)的Action參數(shù)來(lái)決定目前所在的頁(yè)次
<% PAGE = CInt(Request.Querystring("PAGE")) %>
由上一頁(yè)還是下一頁(yè)的按鈕所傳回來(lái)的Action參數(shù)來(lái)決定要顯示資料為哪幾筆
<% RCOUNT = CInt(Request.Querystring("RCOUNT")) %>
如果是第一次進(jìn)來(lái)就一定顯示第一頁(yè)的資料
<% If RCOUNT = "" Then %>
<% RCOUNT = "0" %>
<% End If %>
<% HOWMANY = 10 %>
<% '** 定義每一頁(yè)顯示資料筆數(shù),CmdShowEntries是筆者所開(kāi)啟的資料庫(kù)集合
CmdShowEntries.PageSize = HOWMANY
%>
如果是按下下一頁(yè)的按鈕的話
<% If ACTION = "FORWARD" Then %>
先將目前所在頁(yè)數(shù)加一
<% PAGE = PAGE + 1 %>
再將目前顯示的資料筆數(shù)加10
<% RCOUNT = RCOUNT + HOWMANY %>
這邊就有點(diǎn)技巧了,比如你是從第一頁(yè)跳到第二頁(yè),你應(yīng)該先將第1到第10筆資料略過(guò)
只顯示第11筆到第20筆資料,因?yàn)樵驹诘谝豁?yè)的時(shí)候Rcount為0,加上10之後就等
於10,而這10筆資料就是你所要略過(guò)的,同樣的,如果你是從第二頁(yè)跳往第三頁(yè)的話,
你必須略過(guò)第1筆到第20筆的資料,從第21筆資料開(kāi)始顯示
CmdShowEntries.MoveNext就是在執(zhí)行這個(gè)略過(guò)的動(dòng)作
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
相反的如果是回上一頁(yè)的話
<% If ACTION = "BACK" Then %>
先將目前所在頁(yè)數(shù)減一
<% PAGE = PAGE - 1 %>
再將目前顯示的資料筆數(shù)減10
<% RCOUNT = RCOUNT - HOWMANY %>
如果不是在第一頁(yè)的話(RCOUNT <> 0)才要執(zhí)行資料略過(guò)的動(dòng)作
<% If RCOUNT <> 0 Then %>
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
<% End If %>
同樣的如果Rcount = 0就表示在第一頁(yè)
<% If RCOUNT = "0" Then %>
<% PAGE = 1 %>
<% End If %>
如果資料庫(kù)裡都沒(méi)資料的話就直接顯示網(wǎng)頁(yè)結(jié)尾
<% If CmdShowEntries.RecordCount = 0 Then %>
</BODY>
</HTML>
<% Response.End %>
<% End If %>
<div align="left"><left>
如果資料庫(kù)裡有資料就準(zhǔn)備要顯示資料了
<% y = 0 %>
<% while NOT CmdShowEntries.EOF %>
這邊的內(nèi)容就交給讀者自己去完成了,看你想將資料庫(kù)的內(nèi)容以何種外觀呈現(xiàn)
<% CmdShowEntries.MoveNext %>
這邊是第二個(gè)小技巧,當(dāng)你印完10筆資料之後是不是應(yīng)該停止了呢?沒(méi)錯(cuò),我們
用到一個(gè)變數(shù)Y來(lái)控制,先定義Y等於0,每印一筆資料就將Y加一,當(dāng)Y等於10的
時(shí)候先看看資料庫(kù)是不是還有資料,如果還有資料就將剩下的資料通通略過(guò),就是
CmdShowEntries.MoveNext啦!!
<% y = y + 1 %>
<% if y = HOWMANY then %>
<% while NOT CmdShowEntries.EOF %>
<% CmdShowEntries.MoveNext %>
<% wend %>
<% end if %>
<% wend%>
</center></div>
準(zhǔn)備顯示上一頁(yè)和下一頁(yè)的按鈕囉
<div align="left"><left>
<table border="0" width="400">
<tr>
<td width="200"><% If RCOUNT > 0 Then %>如果不是在第一頁(yè)
就顯示上一頁(yè)的按鈕,並將預(yù)設(shè)的參數(shù)傳回
<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 %>如果不是在最後一頁(yè)就顯示下一頁(yè)的按鈕,並將預(yù)設(shè)的參數(shù)傳回
<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>
怎麼樣大家懂了嗎?
其實(shí)分頁(yè)控制方式有很多種,筆者只是拿這個(gè)簡(jiǎn)單的例子來(lái)作示范,應(yīng)為我覺(jué)得這個(gè)范
例最容易理解而且彈性又大,比如說(shuō)你今天還想多加幾個(gè)按鈕,像是回第一頁(yè),到最後
一頁(yè),你可以這樣寫
<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="最末頁(yè)">
</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="第一頁(yè)"></font>
</p>
</form>
然後在原本判斷是要回上一頁(yè)還是下一頁(yè)的程式段中加上
<% If ACTION = "LAST" Then %>表示到最後一頁(yè)
<% PAGE = CInt(Request.Querystring("PAGE")) %>
<% RCOUNT = CInt(Request.Querystring("RCOUNT")) %>
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
另外一種顯示分頁(yè)控制的方式更是經(jīng)?吹,這種方式就是在網(wǎng)頁(yè)底部秀出數(shù)字或第
幾頁(yè)的超連結(jié),使用者按下按鈕之後就會(huì)到指定的頁(yè)數(shù),利用上面的程式也可以做到
相同的功能,你只要在網(wǎng)頁(yè)底部加上
<%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 %>
然後在原本判斷是要回上一頁(yè)還是下一頁(yè)的程式段中加上
<% If ACTION = "select" Then %>
<% PAGE = CInt(Request.Querystring("PAGE")) %>
<% RCOUNT = CInt(Request.Querystring("RCOUNT")) %>
<% For DACOUNT = 1 To RCOUNT %>
<% CmdShowEntries.MoveNext %>
<% Next %>
<% End If %>
|