網(wǎng)站制作NEWS
怎樣做翻頁(yè)控制條
在微軟的ASP編程體系中,ADO對(duì)象的建立,使得從網(wǎng)頁(yè)訪問(wèn)數(shù)據(jù)庫(kù)成為一件易事,特別是ADO的Recordset對(duì)象使得控制數(shù)據(jù)的輸出顯示更為方便、自由。而在Visual InterDev6.0(以下簡(jiǎn)稱VI6.0)中,由于Script Object Model(以下簡(jiǎn)稱SOM)、Design-Time Control(以下簡(jiǎn)稱DTC)以及Data Environment Object Model(以下簡(jiǎn)稱DEOM)等對(duì)象模型的引入,使網(wǎng)頁(yè)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)設(shè)計(jì)顯得更為方便。
因?yàn)橹黝}方面的原因,關(guān)于數(shù)據(jù)庫(kù)的連接,下文只給出代碼和簡(jiǎn)要注釋,而把重點(diǎn)放在如何利用Recordset對(duì)象(或控件)實(shí)現(xiàn)數(shù)據(jù)記錄的分頁(yè)顯示方面。根據(jù)我的理解,分頁(yè)顯示的關(guān)鍵就在于對(duì)ADO的Recordset對(duì)象或DTC(設(shè)計(jì)時(shí)控件)的Recordset控件的屬性和方法的熟練把握上。
這七種分頁(yè)顯示的武器概括起來(lái)說(shuō)分四類:
第一、二種我暫取名叫“純ASP法”,這也是國(guó)內(nèi)的ASP網(wǎng)站上用得最多的方法,它們的區(qū)別僅在實(shí)現(xiàn)技巧的不同。這兩種方法的實(shí)現(xiàn)最易理解,用到的對(duì)象概念也最少,對(duì)開(kāi)發(fā)環(huán)境的要求也最低(只要記事本就行)。可以說(shuō),這兩種方法的實(shí)質(zhì)還是CGI的編程思想,只是在程序中引入了ADO對(duì)象而已。
第四、五種暫取名叫“SOM的DHTML法”。這兩種方法要求在VI6.0的環(huán)境下,利用微軟提出的腳本對(duì)象模型(Script Object Model)和DHTML中Table對(duì)象的與數(shù)據(jù)庫(kù)綁定的新特性(許多書(shū)和文章只介紹了DHTML的CSS特性在樣式設(shè)計(jì)中的運(yùn)用而忽略介紹其數(shù)據(jù)綁定特性),實(shí)現(xiàn)在客戶端控制翻頁(yè)。但它要求用戶的瀏覽器必須是支持DHTML,如:Microsoft Internet Explorer 4.0及以上的版本。
第六種暫取名叫“SOM服務(wù)器端法”。要求在VI6.0的環(huán)境下開(kāi)發(fā),它利用微軟提出的腳本對(duì)象模型(Script Object Model)中的幾個(gè)DTC控件:Recordset、PageObject、Grid等在服務(wù)器端(客戶端)實(shí)現(xiàn)翻頁(yè)控制。這是一種激動(dòng)人心的、全新的編程方法,它把網(wǎng)頁(yè)看成對(duì)象(這種對(duì)象模型和傳統(tǒng)的DOM----document object model是有區(qū)別的:DOM只能控制客戶端,而SOM可控制服務(wù)器端和客戶端),它真正實(shí)現(xiàn)了網(wǎng)頁(yè)的面向?qū)ο缶幊獭5z憾的是,也許是我個(gè)人能力有限,這種技術(shù)我個(gè)人認(rèn)為還不是很成熟,比如,與瀏覽器的結(jié)合還不是很好,這將在后文詳細(xì)說(shuō)明。
第七種暫取名叫“DEOM法”。它也是利用了VI6.0中建立的數(shù)據(jù)環(huán)境對(duì)象模型(Data Environment Object Model)建立Recordset對(duì)象。這也是在網(wǎng)頁(yè)編程上比較少見(jiàn)的新方法,與SOM模型相比,自有它的優(yōu)點(diǎn),這將在后文詳述。
在后面所舉的所有例子源代碼,都可以直接拷貝使用,你甚至可以不懂其原理,只要把其中的粗斜體字部分換成相應(yīng)自己的數(shù)據(jù)庫(kù)名或字段名就可以了。
在開(kāi)始詳細(xì)介紹各種分頁(yè)方法前,讓我們先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):用Office97中的access自創(chuàng)一個(gè)Employee.mdb,其中建一個(gè)表emp,只設(shè)三個(gè)字段:emp ID,last name和first name。為什么這么簡(jiǎn)單,是因?yàn)槲覀冴P(guān)心的是怎樣處理recordset的結(jié)果。
第一種:參數(shù)直接代入法
這種方法是用手工建立Recordset對(duì)象,利用其pagesize(每頁(yè)指定顯示記錄數(shù)),pagecount(總頁(yè)碼數(shù))和absolutepage(當(dāng)前頁(yè)碼數(shù))屬性來(lái)控制分頁(yè)的輸出。分頁(yè)采用<href>直接帶頁(yè)碼參數(shù)的方法來(lái)控制翻頁(yè)。網(wǎng)頁(yè)的名字為emp1.asp。源代碼如下:
<%//建立與employee.mdb數(shù)據(jù)庫(kù)的連接。
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=employee.mdb"
//建立emp表的Recordset對(duì)象實(shí)例rs。
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "emp", conn, 3
PageSize = 10 //pagesize屬性指定了每頁(yè)要顯示的記錄條數(shù)
Page = CLng(Request("Page")) ’string型轉(zhuǎn)化為long型
If Page < 1 Then Page = 1
If Page > rs.PageCount Then Page = rs.PageCount
If Page <> 1 Then
Response.Write "<A HREF=emp1.asp?Page=1>第一頁(yè)</A>"
Response.Write "<A HREF=emp1.asp?Page=" & (Page-1) & ">上一頁(yè)</A>"
End If
If Page <> rs.PageCount Then
Response.Write "<A HREF=emp1.asp?Page=" & (Page+1) & ">下一頁(yè)</A>"
Response.Write "<A HREF=emp1.asp?Page="&rs.PageCount & ">最后一頁(yè)</A>"
End If
Response.write"頁(yè)碼:" & Page & "/" & rs.PageCount & "</font>"
//每一頁(yè)的顯示
//顯示表頭
Response.Write "<CENTER><TABLE BORDER=1>"
Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Name & "</TD>"
Response.WRITE "<TD>" & rs.Fields("last name").Name & "</TD>"
Response.WRITE "<TD>" & rs.Fields("first name").Name & "</TD></TR>"
//循環(huán)顯示每條記錄
rs.AbsolutePage = Page //把頁(yè)碼賦給absolutepage屬性從而知當(dāng)前頁(yè)的首條記錄號(hào)
For iPage = 1 To rs.PageSize //
Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Value & "</TD>"
Response.WRITE "<TD>" & rs.Fields("first name").Value & "</TD>"
Response.WRITE "<TD>" & rs.Fields("last name").Value & "</TD></TR>"
rs.MoveNext
If rs.EOF Then Exit For
Next
Response.Write "</TABLE></CENTER>"%>
第二種:表單傳送參數(shù)法
這種方法在創(chuàng)建Recordset對(duì)象時(shí)與第一種相同,只是在翻頁(yè)控制時(shí),采用<input>和case語(yǔ)句配合來(lái)實(shí)現(xiàn)翻頁(yè)。網(wǎng)頁(yè)的名字為:emp2.asp。此方法在編程邏輯上有個(gè)缺點(diǎn):就是在按過(guò)“上頁(yè)”或“下頁(yè)”鈕后,再在瀏覽器上按刷新按鈕時(shí),會(huì)自動(dòng)翻頁(yè)。源代碼如下:
if Pagenum = "" Then Pagenum = 1 //從第一頁(yè)開(kāi)始顯示
//建立數(shù)據(jù)庫(kù)連接和Recordset對(duì)象實(shí)例rs。
與第一種方法相同,此處略過(guò)。
RS.Pagesize = 10 ’ 設(shè)置一頁(yè)中顯示的記錄條數(shù)為10條
// 確定翻頁(yè)的動(dòng)作
Select Case Request("NAV")
Case ""
session("Pagenum") = 1
case "First" ’ First Record
session("Pagenum") = 1
case "Prev" ’ Previous Record
if session("Pagenum") > 1 then
session("Pagenum") = session("Pagenum") - 1
End If
case "Next" ’ Next Record
if session("Pagenum")< RS.PageCount then
session("Pagenum") = session("Pagenum") + 1
End if
case "Last" ’ Last Record
session("Pagenum") = RS.PageCount
End Select
RS.Absolutepage = Clng(session("Pagenum")) //確定當(dāng)前頁(yè)的第一條記錄號(hào)
// 顯示當(dāng)前頁(yè)
同第一種方法,此處略過(guò)。
// Nav 翻頁(yè)按鈕設(shè)置
<form method="GET" action="emp2.asp">
<input type="submit" name="NAV" Value="首頁(yè)">
<input type="submit" value="上頁(yè)" name="NAV">
<input type="submit" value="下頁(yè)" name="NAV">
<input type="submit" value="末頁(yè)" name="NAV"></form>
第三種:用Grid控件設(shè)計(jì)分頁(yè)
所有的方法中,這種方法最容易。你只需拖DTC中的Recordset控件和Grid控件到asp網(wǎng)頁(yè)中就行了。而且,你還能選擇是在服務(wù)器平臺(tái)還是在客戶端平臺(tái)控制翻頁(yè)。缺點(diǎn)就是你必須用它給定的格式顯示,而不能自己自由控制表格的顯示格式。
方法如下:
在VI6.0中建一個(gè)工程emp.vip。再在工程中添加一個(gè)asp網(wǎng)頁(yè):emp3.asp。
第一步:選VI6.0菜單條上的“add data connect…”,按開(kāi)發(fā)工具的導(dǎo)航提示,你就可以很容易地建立與Employee.mdb數(shù)據(jù)庫(kù)的連接。從DTC工具欄中拖一個(gè)Recordset控件到網(wǎng)頁(yè)中,并設(shè)置其屬性。具體如圖:
當(dāng)你拖控件到網(wǎng)頁(yè)中時(shí),VI6.0會(huì)自動(dòng)提示你“是否使用Scripting object model”,按yes。
第三步:從DTC工具欄中拖一個(gè)Grid控件到網(wǎng)頁(yè)中,然后單擊鼠標(biāo)右鍵,設(shè)置其屬性,如:選在第二步中創(chuàng)建的Recordset控件名,選擇emp表中的字段,每頁(yè)顯示多少條記錄以及顯示格式等。非常簡(jiǎn)單方便,只要照著導(dǎo)航提示做就行了。
第四種:DHTML法一。
數(shù)據(jù)記錄顯示在一個(gè)HTML表中。它利用DHTML中表的數(shù)據(jù)綁定特性來(lái)控制記錄的分頁(yè)顯示。缺點(diǎn)就是你的翻頁(yè)方法將被限制為一種特定的方式:只能“上頁(yè)”和“下頁(yè)”而不能“首頁(yè)”和“末頁(yè)”。由于是在客戶端控制翻頁(yè),所以,這種和第五種方法是速度最快的,但遺憾的是它只能在支持DHTML的瀏覽器上使用。
在DHTML中,<TABLE>的DATASRC屬性可使表格綁定到一個(gè)數(shù)據(jù)源,另一個(gè)屬性DATAPAGESIZE可指定一頁(yè)一次顯示的記錄數(shù)。
我們來(lái)看下面的例子:
第一步:拖Recordset控件到新建的網(wǎng)頁(yè)emp4.htm中,設(shè)置其屬性,方法同第三種,此處略。
第二步:輸入下面的代碼:
<TABLE ID="Table1" DATASRC="#Recordset1_RDS" DATAPAGESIZE=5> //假定前面設(shè)定Recordset控件名為Recordset1。每頁(yè)顯示5條記錄。
<THEAD>
<TH ALIGN="left" WIDTH=150>Emp ID</TH> //輸出表頭
<TH ALIGN="left" WIDTH=200>Last Name</TH>
<TH ALIGN="left" WIDTH=200>First Name</TH>
</THEAD>
<TR>
<TD><DIV DATAFLD="Emp ID"></DIV></TD> //輸出表內(nèi)容
<TD><DIV DATAFLD="Last Name"></DIV></TD>
<TD><DIV DATAFLD="First Name"></DIV></TD>
</TR>
</TABLE>
第三步:然后,增加一對(duì)DTCs Button按鈕控件來(lái)做翻頁(yè)導(dǎo)航,一個(gè)命名為“btnPrevious”(上一頁(yè)),一個(gè)命名為“btnNext”(下一頁(yè))。它們相應(yīng)的腳本如下:
<SCRIPT LANGUAGE=VBScript>
Function btnPrevious_onclick()
Table1.previousPage()
End Function
Function btnNext_onclick()
Table1.nextPage()
End Function
</SCRIPT>
多重隨機(jī)標(biāo)簽
用于加工聲音的軟件是 貴陽(yáng) 北京九盟互動(dòng)科技有限公司怎么樣 青島城陽(yáng)強(qiáng)盛工貿(mào)有限公司企業(yè)簡(jiǎn)介 適合小學(xué)生免費(fèi)學(xué)英語(yǔ)的軟件 廣告投放運(yùn)營(yíng) 湖南關(guān)稅保證保險(xiǎn)為外貿(mào)企業(yè)緩解資金壓力 全家福用什么顏色的相框比較好 2023年隨州各區(qū)縣gdp排行榜隨州的gdp是多少隨州各區(qū)縣經(jīng)濟(jì)數(shù)據(jù) 東營(yíng)科技職業(yè)學(xué)院是公辦還是民辦 騰訊會(huì)議網(wǎng)頁(yè)版可以加入會(huì)議嗎 鞏義市行政審批服務(wù)中心機(jī)構(gòu)簡(jiǎn)介 女裝店名字簡(jiǎn)潔大氣創(chuàng)意580個(gè)_女裝店名字過(guò)目不忘 重慶現(xiàn)代女子醫(yī)院前景 黃浦區(qū)有哪些樓盤(pán) 工程投資建設(shè)合同范本 python每隔10個(gè)數(shù)疊加代碼 靖江市屬于哪個(gè)省 定西市2018年衛(wèi)生系統(tǒng)公需課在那個(gè)網(wǎng)站 自己怎么制作圓形的文字頭像 石家莊邁創(chuàng)科技有限公司公司簡(jiǎn)介 考后反思的英語(yǔ)作文怎么寫(xiě) 規(guī)模以上工業(yè)企業(yè)認(rèn)定標(biāo)準(zhǔn) 適合做什么樣的工作呢 超市的促進(jìn)銷售的手段都有什么 大數(shù)據(jù)智能營(yíng)銷系統(tǒng)是什么 東莞怎么坐車去廣州動(dòng)車哪個(gè)站 網(wǎng)頁(yè)設(shè)計(jì)規(guī)范 如何查水電費(fèi)號(hào)碼 合肥有哪些房產(chǎn)網(wǎng)站好