成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>開發編程>>ASP>>新聞內容
創建一個ASP通用分頁類
作者:平波 發布時間:2004-7-16 12:00:23 文章來源:無心之柳

  從開始學習到使用ASP到現在也寫了不少程序了,最令人頭痛的是寫數據分頁,每次都是由于幾個變量名或幾個參數的不同,因而需要每次都寫哪一段冗長而又繁雜的分頁代碼,代碼長了使得程序的可讀性變差,容易出差,調試半天也找不出錯在哪里,所以慢慢的我開始使用一些網上的提供的分頁函數或分頁類。的確省事不少,但是通常的函數和類的做法都是就數據顯示部分也封裝了起來,每次為了達到自己需要的顯求效果要去改動函數或者類的本身,所以使用起來也不是怎么方便,自己寫的分頁改起來已經夠復雜了,更不要說別人的了。

所以趁昨天有空自己寫了一個分頁的類,自我感覺良好(不要用雞蛋砸我),在這里和大家分享一下自己的經驗(談不上經驗,感想吧)。在這里我也不想說分頁的原理了,反正大家都懂,要我往深入的談我也不會。呵呵。

一、創建分頁類的目標
在寫之前,我曾想過,我究竟要寫怎么樣一個類,回想起以前寫分頁過程的時候,最煩的莫過于每次都要寫哪一段復雜的分頁代碼,最大的煩惱每次都是僅僅幾個變量名的不同。所以第一個要實現的就是要把這個封裝起來,第二個就是要把分頁的導航條也封裝起來,第三個,不習慣哪些把數據顯示部分也封裝起來的方法,這不是方便編程,對與哪些對顯示效果每次都不同的用戶來說,比自己寫分頁還要麻煩。所以我的目地就是對RecordSet進行一些簡單的封裝。

二、創建過程
所以我寫的第一個屬性,就是返一個經過處理的RecordSe

Public Property Get GetRs()
  Set XD_Rs=Server.createobject("adodb.recordset")
  XD_Rs.PageSize=PageSize
  XD_Rs.Open XD_SQL,XD_Conn,1,1
  If not(XD_Rs.eof and XD_RS.BOF) Then
  If int_curpage>XD_RS.PageCount Then
int_curpage=XD_RS.PageCount
  End If
  XD_Rs.AbsolutePage=int_curpage
  End If
  Set GetRs=XD_RS
End Property

   這個屬性的作用是更據指定RecordSet 的當前面,并到指針指向當前頁的第一條記錄,這個應該就是整個類的完成分頁的核心了,當然,其中的一些參數是靠其它的屬性來獲取,所以這里順便介紹一個這個類所要的基本參數

=============================================
'GetConn 得到數據庫連接
'
'=============================================
Public Property Let GetConn(obj_Conn)
  Set XD_Conn=obj_Conn
End Property

'=============================================
'GetSQL 得到查詢語句
'
'==============================================
Public Property Let GetSQL(str_sql)
  XD_SQL=str_sql
End Property

'===============================================
'PageSize 屬性
'設置每一頁的分頁大小
'===============================================
Public Property Let PageSize(int_PageSize)
  If IsNumeric(Int_Pagesize) Then
  XD_PageSize=CLng(int_PageSize)
  Else
  str_error=str_error & "PageSize的參數不正確"
  ShowError()
  End If
End Property

Public Property Get PageSize
  If XD_PageSize="" or (not(IsNumeric(XD_PageSize))) Then
  PageSize=10
  Else
  PageSize=XD_PageSize
  End If
End Property

以上幾個是在使用類的過程必需要指定的參數,曾經我在寫屬性的時候對每個傳入的參數加上IsObject(obj_conn)等判斷,為的是類的健壯,但是后來想來想去,這個對與ASP來說沒有必要,不加還能加快點速度,至于為什么這樣,我想各位在使用過程中也會發現,加還不如不加。這也是我經過了思想斗爭以后才去掉了,只保留了一些必要的驗證。
一個參數就是當前頁的獲得,在程序中我用int_curpage來標識,這個的話放在類的創建過程中獲得在好也沒有了

  '========================
  '設定一些參數的黙認值
  '========================
  XD_PageSize=10 '設定分頁的默認值為10
  '========================
  '獲取當前面的值
  '========================
  If request("page")="" Then
  int_curpage=1
  ElseIf not(IsNumeric(request("page"))) Then
  int_curpage=1
  ElseIf CInt(Trim(request("page")))<1 Then
  int_curpage=1
  Else
  Int_curpage=CInt(Trim(request("page")))
  End If 
End Sub

到這里這個類分的功能基本已經實現了,只要在調用這個類的頁面的URL后面加上page=n,它就會顯示第n頁的內容了,所以接下去要做的就是創建一個數據導航條了,我把它設計為類似以面的形式
9 3[1] [2] [3] [4] [5] [6] [7] [8] 4 :頁次:1/8頁 共51條記錄 7條/每頁


在頁面里通過調用ShowPage()的方法顯示出來,ShowPage可以在GetRS以后的任意位置調用,也可以調用多次

Public Sub ShowPage()
Dim str_tmp
int_totalRecord=XD_RS.RecordCount
If int_totalRecord<=0 Then
  str_error=str_error & "總記錄數為零,請輸入數據"
  Call ShowError()
End If
If int_totalRecord
  int_TotalPage=1
Else
  If int_totalRecord mod PageSize =0 Then
int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1
  Else
int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1+1
  End If
End If

If Int_curpage>int_Totalpage Then
  int_curpage=int_TotalPage
End If

'=====================================================
'顯示分頁信息,各個模塊根據自己要求更改顯求位置
'=====================================================
response.write "
str_tmp=ShowFirstPrv '顯示首頁、前一頁
response.write str_tmp 
str_tmp=showNumBtn '數字導航
response.write str_tmp
str_tmp=ShowNextLast  '下一頁、末頁
response.write str_tmp
str_tmp=ShowPageInfo
response.write str_tmp
response.write ""
end Sub

到這里類的功能才算完整(為了節省版面,我有些方法沒有放上去,再下面附上全部完整代碼)寫一個簡單頁面測試一下

 ’把分頁類包含進來<%
Set mypage=new xdownpage
mypage.getconn=conn
mypage.getsql="select * from productinfo order by id asc"
mypage.pagesize=7
set rs=mypage.getrs() '得到Recordset
mypage.showpage() '顯示分頁導航條
for i=1 to mypage.pagesize  '下面的使用就和使用一般的recordset沒有什么兩樣了
if not rs.eof then '用來判斷是否到達最后一條的,一定要加,不然最后一頁分出問題
response.write rs("key") & "
" '在這里就可以按自己的意思顯示代碼了,
rs.movenext
else
exit for
end if
next

效果還不錯,該有的全有了。

分頁過程中,還有一個比軟麻煩的問題是,在帶多個參數的URL中,如保證在頁面轉向的時候不掉失其它參數。我靠一個GetURL的過程來實現,并在生成導航時調用。

Private Function GetURL()
  Dim strurl,str_url,i,j,search_str,result_url
  search_str="page="
  strurl=Request.ServerVariables("URL")
  Strurl=split(strurl,"/")
  i=UBound(strurl,1)
  str_url=strurl(i)'得到當前頁文件名
  str_params=Request.ServerVariables("QUERY_STRING")
  If str_params="" Then
  result_url=str_url & "?page="
  Else
  If InstrRev(str_params,search_str)=0 Then
result_url=str_url & "?" & str_params &"&page="
  Else
j=InstrRev(str_params,search_str)-2
If j=-1 Then
  result_url=str_url & "?page="
Else
  str_params=Left(str_params,j)
  result_url=str_url & "?" & str_params &"&page="
End If
  End If
  End If
  GetURL=result_url
End Function

通過GetURL的處理,可以自動的獲取當前面的文件名,和所有帶的參數,實現了頁面轉換頁不丟失參數。
三、后記
通過這個分頁類,解決了每次分頁時需要重復寫的分頁部分代碼,方便了編程,也使的提高了主要代碼的可讀性。也希望能給大家在編程過程中帶來一點方便,由于本人水平有限,程序和文章中難免有錯,還望大家批評指正。

附全部代碼:

[Ctrl+A 全部選擇 然后拷貝]


最新更新
·數據庫被掛馬的ASP處理方法
·ASP快速獲取遠程文件大小的方
·用ASP屏蔽迅雷和旋風下載工具
·解決ASP中傳送中文參數亂碼的
·ASP+AJAX做類似Google的搜索
·ASP的一個非常棒的Debug類(
·ASP中常用的服務器檢測源代碼
·優化ASP中執行SQL效率的五個
·ASP種msxml3.dll 800c0005錯
·掛QQ的ASP版本網頁源代碼
相關信息
·數據庫被掛馬的ASP處理方法
·ASP快速獲取遠程文件大小的方法
·用ASP屏蔽迅雷和旋風下載工具的P2P下載
·解決ASP中傳送中文參數亂碼的問題
·ASP+AJAX做類似Google的搜索提示
·ASP的一個非常棒的Debug類(VBScript)
·ASP中常用的服務器檢測源代碼
·優化ASP中執行SQL效率的五個方法
·ASP種msxml3.dll 800c0005錯誤的另一解決方法
·掛QQ的ASP版本網頁源代碼
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個傳說
丟了幸福的豬
找個人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因為寂寞才想你
愛上你等于愛上了錯
在心里從此永遠有個你
一個人的寂寞兩個人的錯
主站蜘蛛池模板: 英吉沙县| 威海市| 琼海市| 耒阳市| 游戏| 甘孜| 福贡县| 和林格尔县| 漳州市| 喜德县| 衡东县| 桃园市| 平遥县| 安福县| 江津市| 陇西县| 新巴尔虎左旗| 梅河口市| 绵阳市| 洪洞县| 克东县| 阿拉善右旗| 河北区| 吐鲁番市| 扎兰屯市| 绥化市| 滦平县| 马公市| 泰宁县| 肃北| 綦江县| 民和| 运城市| 喀喇沁旗| 凤阳县| 上思县| 伊吾县| 土默特右旗| 高州市| 隆昌县| 玛多县|