XDOWNPAGE ASP版本 分页类

时间:2022-06-01 18:14:46
  1. <%  
  2. '===================================================================  
  3. 'XDOWNPAGE   ASP版本  
  4. '版本   1.00  
  5. 'Code by  zykj2000  
  6. 'Email:   zykj_2000@163.net  
  7. 'BBS:   http://bbs.513soft.net  
  8. '本程序可以免费使用、修改,希望我的程序能为您的工作带来方便  
  9. '但请保留以上请息  
  10. '  
  11. '程序特点  
  12. '本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户自定义,  
  13. '支持URL多个参数  
  14. '  
  15. '使用说明  
  16. '程序参数说明  
  17. 'PapgeSize      定义分页每一页的记录数  
  18. 'GetRS       返回经过分页的Recordset此属性只读  
  19. 'GetConn      得到数据库连接  
  20. 'GetSQL       得到查询语句  
  21. '程序方法说明  
  22. 'ShowPage      显示分页导航条,唯一的公用方法  
  23. '  
  24. '===================================================================  
  25.  
  26. Const Btn_First="<font face=""webdings"">9</font>"  '定义第一页按钮显示样式  
  27. Const Btn_Prev="<font face=""webdings"">3</font>"  '定义前一页按钮显示样式  
  28. Const Btn_Next="<font face=""webdings"">4</font>"  '定义下一页按钮显示样式  
  29. Const Btn_Last="<font face=""webdings"">:</font>"  '定义最后一页按钮显示样式  
  30. Const XD_Align="Center"     '定义分页信息对齐方式  
  31. Const XD_Width="100%"     '定义分页信息框大小  
  32.  
  33. Class Xdownpage  
  34. Private XD_PageCount,XD_Conn,XD_Rs,XD_SQL,XD_PageSize,Str_errors,int_curpage,str_URL,int_totalPage,int_totalRecord,XD_sURL  
  35.  
  36.  
  37. '=================================================================  
  38. 'PageSize 属性  
  39. '设置每一页的分页大小  
  40. '=================================================================  
  41. Public Property Let PageSize(int_PageSize)  
  42.  If IsNumeric(Int_Pagesize) Then  
  43.   XD_PageSize=CLng(int_PageSize)  
  44.  Else  
  45.   str_error=str_error & "PageSize的参数不正确"  
  46.   ShowError()  
  47.  End If  
  48. End Property  
  49. Public Property Get PageSize  
  50.  If XD_PageSize="" or (not(IsNumeric(XD_PageSize))) Then  
  51.   PageSize=10       
  52.  Else  
  53.   PageSize=XD_PageSize  
  54.  End If  
  55. End Property  
  56.  
  57. '=================================================================  
  58. 'GetRS 属性  
  59. '返回分页后的记录集  
  60. '=================================================================  
  61. Public Property Get GetRs()  
  62.  Set XD_Rs=Server.createobject("adodb.recordset")  
  63.  XD_Rs.PageSize=PageSize  
  64.  XD_Rs.Open XD_SQL,XD_Conn,1,1  
  65.  If not(XD_Rs.eof and XD_RS.BOF) Then  
  66.   If int_curpage>XD_RS.PageCount Then  
  67.    int_curpage=XD_RS.PageCount  
  68.   End If  
  69.   XD_Rs.AbsolutePage=int_curpage  
  70.  End If  
  71.  Set GetRs=XD_RS  
  72. End Property  
  73.  
  74. '================================================================  
  75. 'GetConn  得到数据库连接  
  76. '  
  77. '================================================================   
  78. Public Property Let GetConn(obj_Conn)  
  79.  Set XD_Conn=obj_Conn  
  80. End Property  
  81.  
  82. '================================================================  
  83. 'GetSQL   得到查询语句  
  84. '  
  85. '================================================================  
  86. Public Property Let GetSQL(str_sql)  
  87.  XD_SQL=str_sql  
  88. End Property  
  89.  
  90.    
  91.  
  92. '==================================================================  
  93. 'Class_Initialize 类的初始化  
  94. '初始化当前页的值  
  95. '  
  96. '==================================================================   
  97. Private Sub Class_Initialize  
  98.  '========================  
  99.  '设定一些参数的黙认值  
  100.  '========================  
  101.  XD_PageSize=10  '设定分页的默认值为10  
  102.  '========================  
  103.  '获取当前面的值  
  104.  '========================  
  105.  If request("page")="" Then  
  106.   int_curpage=1  
  107.  ElseIf not(IsNumeric(request("page"))) Then  
  108.   int_curpage=1  
  109.  ElseIf CInt(Trim(request("page")))<1 Then  
  110.   int_curpage=1  
  111.  Else  
  112.   Int_curpage=CInt(Trim(request("page")))  
  113.  End If  
  114.  
  115. End Sub  
  116.  
  117. '====================================================================  
  118. 'ShowPage  创建分页导航条  
  119. '有首页、前一页、下一页、末页、还有数字导航  
  120. '  
  121. '====================================================================  
  122. Public Sub ShowPage()  
  123.  Dim str_tmp  
  124.  XD_sURL = GetUrl()  
  125.  int_totalRecord=XD_RS.RecordCount  
  126.  If int_totalRecord<=0 Then  
  127.   str_error=str_error & "总记录数为零,请输入数据"  
  128.   Call ShowError()  
  129.  End If  
  130.  If int_totalRecord="" then  
  131.      int_TotalPage=1  
  132.  Else  
  133.   If int_totalRecord mod PageSize =0 Then  
  134.    int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1  
  135.   Else  
  136.    int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1+1  
  137.   End If  
  138.  End If  
  139.  
  140.  If Int_curpage>int_Totalpage Then  
  141.   int_curpage=int_TotalPage  
  142.  End If  
  143.  
  144.  '==================================================================  
  145.  '显示分页信息,各个模块根据自己要求更改显求位置  
  146.  '==================================================================  
  147.  response.write ""  
  148.  str_tmp=ShowFirstPrv  
  149.  response.write str_tmp  
  150.  str_tmp=showNumBtn  
  151.  response.write str_tmp  
  152.  str_tmp=ShowNextLast  
  153.  response.write str_tmp  
  154.  str_tmp=ShowPageInfo  
  155.  response.write str_tmp  
  156.  
  157.  response.write ""  
  158. End Sub  
  159.  
  160. '====================================================================  
  161. 'ShowFirstPrv  显示首页、前一页  
  162. '  
  163. '  
  164. '====================================================================  
  165. Private Function ShowFirstPrv()  
  166.  Dim Str_tmp,int_prvpage  
  167.  If int_curpage=1 Then  
  168.   str_tmp=Btn_First&" "&Btn_Prev  
  169.  Else  
  170.   int_prvpage=int_curpage-1  
  171.   str_tmp="<a href="""&XD_sURL & "1" & """>" & Btn_First&"</a> <a href=""" & XD_sURL & CStr(int_prvpage) & """>" & Btn_Prev&"</a>"  
  172.  End If  
  173.  ShowFirstPrv=str_tmp  
  174. End Function  
  175.  
  176. '====================================================================  
  177. 'ShowNextLast  下一页、末页  
  178. '  
  179. '  
  180. '====================================================================  
  181. Private Function ShowNextLast()  
  182.  Dim str_tmp,int_Nextpage  
  183.  If Int_curpage>=int_totalpage Then  
  184.   str_tmp=Btn_Next & " " & Btn_Last  
  185.  Else  
  186.   Int_NextPage=int_curpage+1  
  187.   str_tmp="<a href=""" & XD_sURL & CStr(int_nextpage) & """>" & Btn_Next&"</a> <a href="""& XD_sURL & CStr(int_totalpage) & """>" &  Btn_Last&"</a>"  
  188.  End If  
  189.  ShowNextLast=str_tmp  
  190. End Function  
  191.  
  192.  
  193. '====================================================================  
  194. 'ShowNumBtn  数字导航  
  195. '  
  196. '  
  197. '====================================================================  
  198. Private Function showNumBtn()  
  199.  Dim i,str_tmp  
  200.  For i=1 to int_totalpage  
  201.   str_tmp=str_tmp & "[<a href=""" & XD_sURL & CStr(i) & """>"&i&"</a>] "  
  202.  Next  
  203.  showNumBtn=str_tmp  
  204. End Function  
  205.  
  206.  
  207. '====================================================================  
  208. 'ShowPageInfo  分页信息  
  209. '更据要求自行修改  
  210. '  
  211. '====================================================================  
  212. Private Function ShowPageInfo()  
  213.  Dim str_tmp  
  214.  str_tmp="页次:"&int_curpage&"/"&int_totalpage&"页 共"&int_totalrecord&"条记录 "&XD_PageSize&"条/每页"  
  215.  ShowPageInfo=str_tmp  
  216. End Function  
  217. '==================================================================  
  218. 'GetURL  得到当前的URL  
  219. '更据URL参数不同,获取不同的结果  
  220. '  
  221. '==================================================================  
  222. Private Function GetURL()  
  223.  Dim strurl,str_url,i,j,search_str,result_url  
  224.  search_str="page="  
  225.  
  226.  strurl=Request.ServerVariables("URL")  
  227.  Strurl=split(strurl,"/")  
  228.  i=UBound(strurl,1)  
  229.  str_url=strurl(i)'得到当前页文件名  
  230.  
  231.  str_params=Trim(Request.ServerVariables("QUERY_STRING"))  
  232.  If str_params="" Then  
  233.   result_url=str_url & "?page="  
  234.  Else  
  235.   If InstrRev(str_params,search_str)=0 Then  
  236.    result_url=str_url & "?" & str_params &"&page="  
  237.   Else  
  238.    j=InstrRev(str_params,search_str)-2  
  239.    If j=-1 Then  
  240.     result_url=str_url & "?page="  
  241.    Else  
  242.     str_params=Left(str_params,j)  
  243.     result_url=str_url & "?" & str_params &"&page="  
  244.    End If  
  245.   End If  
  246.  End If  
  247.  GetURL=result_url  
  248. End Function  
  249.  
  250. '====================================================================  
  251. ' 设置 Terminate 事件。  
  252. '  
  253. '====================================================================  
  254. Private Sub Class_Terminate    
  255.  XD_RS.close  
  256.  Set XD_RS=nothing  
  257. End Sub  
  258. '====================================================================  
  259. 'ShowError  错误提示  
  260. '  
  261. '  
  262. '====================================================================  
  263. Private Sub ShowError()  
  264.  If str_Error <> "" Then  
  265.   Response.Write("" & str_Error & "")  
  266.   Response.End  
  267.  End If  
  268. End Sub  
  269. End class  
  270.  
  271.  
  272.  
  273. 'set conn = server.CreateObject("adodb.connection")  
  274. 'conn.open "driver={microsoft access driver (*.mdb)};dbq=" & server.Mappath("/data/5iduohai.mdb")  
  275. '  
  276. ''#############类调用样例#################  
  277. ''创建对象  
  278. 'Set mypage=new xdownpage  
  279. ''得到数据库连接  
  280. 'mypage.getconn=conn  
  281. ''sql语句  
  282. 'mypage.getsql="select * from [DH_Company] order by id asc"  
  283. ''设置每一页的记录条数据为5条  
  284. 'mypage.pagesize=5  
  285. ''返回Recordset  
  286. 'set rs=mypage.getrs()  
  287. '显示分页信息,这个方法可以,在set rs=mypage.getrs()以后,可在任意位置调用,可以调用多次  
  288.  
  289. '  
  290. ''显示数据  
  291. 'Response.Write("<br/>")  
  292. 'for i=1 to mypage.pagesize  
  293. ''这里就可以自定义显示方式了  
  294. '    if not rs.eof then   
  295. '        response.write rs(0) & "<br/>"  
  296. '        rs.movenext  
  297. '    else  
  298. '         exit for  
  299. '    end if  
  300. 'next  
  301. 'mypage.showpage()  
  302. %>