asp 通用分頁類

來源:互聯網
上載者:User


<%@LANGUAGE = "VBScript" CODEPAGE="936"%>
<%Option Explicit%>

<!--#include file="Cls_PageView.asp"-->
Class Cls_PageView
 Private sbooInitState
 Private sstrPageUrl
 Private sstrPageVar
 Private sstrSql
 Private sstrSqlCount

 Private sintRecordCount
 Private sintPageSize
 Private sintPageNow
 Private sintPageMax

 Private sobjConn

 Private sstrPageInfo

 Private Sub Class_Initialize
  Call ClearVars()
 End Sub

 Private Sub class_terminate()
  Set sobjConn = nothing
 End Sub

 Public Sub ClearVars()
  sbooInitState = False
  sstrPageUrl = ""
  sstrPageVar = "page"

  sintRecordCount = 0
  sintPageSize = 20
  sintPageNow = 0
  sintPageMax = 0
 End Sub

 Private Sub ClearMainVars()
  sstrSql = ""
 End Sub

 Rem ## SQL語句
 Public Property Let strSQL(Value)
  sstrSql = Value
 End Property

 Rem ## SQL語句
 Public Property Let strSQLCount(Value)
  sstrSqlCount = Value
 End Property

 Rem ## 轉向地址
 Public Property Let strPageUrl(Value)
  sstrPageUrl = Value
 End Property

 Rem ## 每頁顯示的記錄條數
 Public Property Let intPageSize(Value)
  sintPageSize = toNum(Value, 20)
 End Property

 Rem ## 資料庫連接對象
 Public Property Let objConn(Value)
  Set sobjConn = Value
 End Property

 Rem ## 當前頁
 Public Property Let intPageNow(Value)
  sintPageNow = toNum(Value, 1)
 End Property

 Rem ## 設定記錄總數
 Public Property Let intRecordCount(Value)
  sintRecordCount = toNum(Value, -1)
  If sintRecordCount < 0 Then sintRecordCount = -1
 End Property

 Rem ## 頁面參數
 Public Property Let strPageVar(Value)
  sstrPageVar = Value
 End Property

 Rem ## 獲得當前頁
 Public Property Get intPageNow()
  intPageNow = singPageNow
 End Property

 Rem ## 分頁資訊
 Public Property Get strPageInfo()
  strPageInfo = sstrPageInfo
 End Property

 Rem ## 取得記錄集, 二維數組或字串, 在進行迴圈輸出時必須用 IsArray() 判斷
 Public Property Get arrRecordInfo()
  Call InitClass()
  If Not sbooInitState Then
   Response.Write("分頁類初始化失敗, 請檢查各參數情況")
   Exit Property
  End If

  Dim rs, sql
  sql = sstrSql

  Set rs = Server.CreateObject("Adodb.RecordSet")

  Rem 若記錄數統計語句不為空白, 則取語句執行後第一個欄位值作為記錄數
  If sstrSqlCount <> "" Then
   rs.Open sstrSqlCount, sobjConn, 1, 1
   If Not(rs.eof or rs.bof) Then
    sintRecordCount = rs(0)
   Else
    sintRecordCount = 0
   End If
   rs.Close
  End If

  rs.open sql, sobjConn, 1, 1

  Rem 若無記錄統計語句且未設定記錄總數, 則由記錄集RecordCount屬性得出.
  If sintRecordCount < 0 Then
   sintRecordCount = rs.RecordCount
  End If
  If sintRecordCount < 0 Then sintRecordCount = 0

  '產生分頁資訊
  Call InitPageInfo()

  If Not(rs.eof or rs.bof) Then
   rs.PageSize = sintPageSize
   rs.AbsolutePage = sintPageNow
   If Not(rs.eof or rs.bof) Then
    arrRecordInfo = rs.getrows(sintPageSize)
   Else
    arrRecordInfo = ""
   End If
  Else
   arrRecordInfo = ""
  End If
  rs.close
  Set rs = nothing

  Call ClearMainVars()
 End Property

 Rem ## 初始化分頁資訊
 Private Sub InitPageInfo()
  sstrPageInfo = ""

  Dim surl
  surl = sstrPageUrl
  If Instr(1, surl, "?", 1) > 0 Then
   surl = surl & "&" & sstrPageVar & "="
  Else
   surl = surl & "?" & sstrPageVar & "="
  End If

  If sintPageNow <= 0 Then sintPageNow = 1
  If sintRecordCount mod sintPageSize = 0 Then
   sintPageMax = sintRecordCount sintPageSize
  Else
   sintPageMax = sintRecordCount sintPageSize + 1
  End If
  If sintPageNow > sintPageMax Then sintPageNow = sintPageMax

  If sintPageNow <= 1 then
   sstrPageInfo = "首頁 上一頁"
  Else
   sstrPageInfo = sstrPageInfo & " <a href=""" & surl & "1"">首頁</a>"
   sstrPageInfo = sstrPageInfo & " <a href=""" & surl & (sintPageNow - 1) & """>上一頁</a>"
  End If

  If sintPageMax - sintPageNow < 1 then
   sstrPageInfo = sstrPageInfo & " 下一頁 末頁 "
  Else
   sstrPageInfo = sstrPageInfo & " <a href=""" & surl & (sintPageNow + 1) & """>下一頁</a> "
   sstrPageInfo = sstrPageInfo & " <a href=""" & surl & sintPageMax & """>末頁</a> "
  End If

  sstrPageInfo = sstrPageInfo & " 頁次:<strong><font color=""#990000"">" & sintPageNow & "</font> / " & sintPageMax & " </strong>"
  sstrPageInfo = sstrPageInfo & " 共 <strong>" & sintRecordCount & "</strong> 條記錄 <strong>" & sintPageSize & "</strong> 條/頁 "
 End Sub

 Rem ## 長整數轉換
 Private function toNum(s, Default)
  s = s & ""
  If s <> "" And IsNumeric(s) Then
   toNum = CLng(s)
  Else
   toNum = Default
  End If
 End function

 Rem ## 類初始化
 Public Sub InitClass()
  sbooInitState = True
  If Not(IsObject(sobjConn)) Then
   sbooInitState = False

   response.write("資料庫連接未指定")
   response.End()
  End If
  If Trim(sstrSql) = "" Then
   sbooInitState = False

   response.write("SQL語句未指定")
   response.End()
  End If
  sintPageSize = toNum(sintPageSize, 20)
  If (sintPageSize < 1) Or (sintPageSize > 100) Then
   sbooInitState = False

   response.write("每頁記集數未設定或不符合規則(1 - 100)")
   response.End()
  End If
  sintPageNow = toNum(sintPageNow, 1)

  sintRecordCount = -1
 End Sub
End Class
<%
 response.Buffer = True
 Dim intDateStart
 intDateStart = Timer()

 Rem ## 開啟資料庫連接
 Rem #################################################################
  function f__OpenConn()
   Dim strDbPath
   Dim connstr
   strDbPath = "./db.mdb"
   connstr  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
   connstr  = connstr & Server.MapPath(strDbPath)
   Set conn  = Server.CreateObject("Adodb.Connection")
   conn.open connstr
  End function
 Rem #################################################################
 
 Rem ## 關閉資料庫連接
 Rem #################################################################
  function f__CloseConn()
   If IsObject(conn) Then
    conn.close
   End If
   Set conn = nothing
  End function
 Rem #################################################################

 Rem 獲得執行時間
 Rem #################################################################
 function getTimeOver(iflag)
  Dim tTimeOver
  If iflag = 1 Then
   tTimeOver = FormatNumber(Timer() - intDateStart, 6, true)
   getTimeOver = " 本頁執行時間: " & tTimeOver & " 秒"
  Else
   tTimeOver = FormatNumber((Timer() - intDateStart) * 1000, 3, true)
   getTimeOver = " 本頁執行時間: " & tTimeOver & " 毫秒"
  End If
 End function
 Rem #################################################################

 Dim strLocalUrl
 strLocalUrl = request.ServerVariables("SCRIPT_NAME")
 
 Dim intPageNow
 intPageNow = request.QueryString("page")
 
 Dim intPageSize, strPageInfo
 intPageSize = 30
 
 Dim arrRecordInfo, i
 Dim Conn, sql, sqlCount
 sql = "SELECT [ID], [aaaa], [bbbb], [cccc]" & _
  " FROM [table1]" & _
  " ORDER BY [ID] DESC"
 sqlCount = "SELECT Count([ID])" & _
   " FROM [table1]"
 f__OpenConn
  Dim clsRecordInfo
  Set clsRecordInfo = New Cls_PageView
  
  Rem 記錄集總數取值優先順序: strSqlCount >>  intRecordCount
  Rem 即當 strSqlCount 有值時, intRecordCount 無作用
  Rem 因此, 若要手工設定記錄總數, 請設定 intRecordCount, strSqlCount 留空
  Rem 若以上兩者都沒有設定, 則取 strSql 執行後的 RecordCount 屬性.
   clsRecordInfo.intRecordCount = 2816
   clsRecordInfo.strSqlCount = sqlCount
  Rem 此處因設定了 strSqlCount, 則記錄總數將由此語句計算得出.
  
  Rem 設定 SQL 查詢語句
   clsRecordInfo.strSql = sql
  
  Rem 設定每頁顯示數
   clsRecordInfo.intPageSize = intPageSize
  
  Rem 設定當前顯示頁
   clsRecordInfo.intPageNow = intPageNow
  
  Rem 設定轉向頁面
   clsRecordInfo.strPageUrl = strLocalUrl
  
  Rem 設定頁面轉向參數
   clsRecordInfo.strPageVar = "page"

  clsRecordInfo.objConn = Conn  
  arrRecordInfo = clsRecordInfo.arrRecordInfo
  strPageInfo = clsRecordInfo.strPageInfo
  Set clsRecordInfo = nothing
 f__CloseConn
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>蕭月痕通用分頁類1.2 測試</title>
<link rel="stylesheet" href="page.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="PageView">
<table width="760" border="1" cellspacing="0" cellpadding="4" align="center" bordercolordark="#FFFFFF" bordercolorlight="#CCCCCC">
  <tr align="center">
    <td width="60">ID</td>
    <td width="150">標題</td>
    <td width="*">內容(顯示前20個字)</td>
    <td width="150">時間</td>
  </tr>
 <%
  Dim bgColor
  If IsArray(arrRecordInfo) Then
   For i = 0 to UBound(arrRecordInfo, 2)
   bgColor="#FFFFFF"
   if i mod 2=0 then bgColor="#DFEFFF"
 %>
  <tr bgcolor="<%=bgColor%>">
    <td width="60"><%= arrRecordInfo(0, i)%></td>
    <td width="150"><%= arrRecordInfo(1, i)%></td>
    <td width="*"><%= arrRecordInfo(2, i)%></td>
    <td width="150"><%= arrRecordInfo(3, i)%></td>
  </tr>
 <%
   Next
  End If
 %>
</table>
</div>
<table width="760" border="0" cellspacing="0" cellpadding="4">
 <tr>
  <td><%= strPageInfo%></td>
 </tr>
 <tr>
  <td align="center"><%= getTimeOver(0)%></td>
 </tr>
</table>
</body>
</html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.