ASP.NET處理資料分頁(1)

來源:互聯網
上載者:User
asp.net|分頁|資料 在ASP的資料庫編程的時,由於瀏覽器的大小限制,在要瀏覽的資料記錄比較多的時候,為了達到更直觀的效果,我們把這些資料記錄分成若干的頁面,通過資料導覽按鈕(或者其他超連結),分頁的瀏覽。其實這種資料記錄的分頁瀏覽在ASP.NET也能夠實現。並且在實現的過程中比起在ASP的處理過程顯得條理更清晰,也更容易些。  

通過瀏覽器進行分頁瀏覽資料記錄基本類型主要有二種。其他類型的分頁瀏覽要麼是對這二種類型的修改,要麼是對這二種類型的綜合。具體表現方式的如下面這二幅圖:  

下面就來探討一下在ASP.NET中這二種分頁瀏覽資料記錄的具體實現過程:  

首先來介紹一下我們使用的資料庫,在本文中為了方便起見,我們使用了本機資料庫Access 2000,資料庫名稱為'Data.mdb',裡面存放了一張資料表'tblItem'。此資料表的結構如下:  

欄位名稱 欄位類型  
ItemID 自動編號  
ItemName 文本類型  


如果你採用的是別的資料庫,只需對下面介紹的程式進行簡單的修改就可以了。這將在下面介紹。  

一. 本文程式設計和啟動並執行軟體環境:  

(1).微軟公司視窗2000伺服器版  

(2)..Net FrameWork SDK Beta 2  

二. 第一種分頁瀏覽資料記錄的關鍵步驟以及實現方法:  

(1).首先要得到初始瀏覽資料記錄的超連結字串:  

這其實很關鍵,因為在第一種分頁瀏覽中的'首頁'、'下一頁'等操作,都是通過在這個超連結字串後面加入要瀏覽頁面的參數來實現的,在本文的程式中是通過GetPageName ( )函數來實現的。此函數具體如下:  

Function GetPageName ( ) As String
  Dim Str As String
  Dim Pos As Short
  Str = Request.ServerVariables ( 'Script_Name' ).Trim ( )
  Pos = Str.LastIndexOf ( '/' )
  If Pos >= 0 Then
  Return Str.SubString ( Pos + 1 )
  Else
  Return Str
  End If
  End Function  


(2).要得到你所要瀏覽的資料記錄總數:  

在本文中,為了方便,我們是把資料表'tblItem'中的全部記錄都拿來瀏覽。ASP.NET頁面通過ADO.NET來得到資料表'tblItem'。下面代碼就是利用ADO.NET來得到'tblItm'表中記錄總數的程式碼:  

<% @ Page Language = 'VB' %>
  <% @ Import Namespace = 'System.Data' %>
  <% @ Import Namespace = 'System.Data.OleDb' %>
  <script runat = 'server' >
  Dim strConn As String '定義資料連線字串  
Dim SQL As String  '定義SQL語句
  Dim odConn As OleDbConnection
  Dim odAdapt As OleDbDataAdapter
  Dim DS As DataSet '建立DataSet對象
  Dim DT As DataTable '建立DataTable對象
  Dim nStart As Integer '存放當前頁面的起始記錄序號
  Dim nEnd As Integer '存放當前頁面的終止記錄序號
  Dim i As Integer  

'確認要瀏覽的頁面序號
nPage = Convert.ToInt32 ( Request.QueryString ( 'Page' ) )
  SQL = 'SELECT * FROM tblItem '
  
  '建立資料連線字串
  strConn = ' Provider = Microsoft.Jet.OLEDB.4.0 ; ' & _
  ' Data Source = ' & Server.MapPath ( 'data.mdb' ) & ' ; ' & _
  ' User ID = ; Password = ; '
  Try
  '得到資料記錄總數
  odConn = New OleDbConnection ( strConn )
  odAdapt = New OleDbDataAdapter ( SQL , odConn )
  DS = New DataSet
  odAdapt.Fill ( DS )
  DT = DS.Tables ( 0 )
  '得到資料記錄總數
  nRecCount = DT.Rows.Count
  Catch e As Exception
  Response.Write('錯誤資訊: <b>' & e.Message & '</b><p>')
  nRecCount = 0
  End Try
  </script >  


(3).計算出瀏覽的資料記錄總共頁面數:  

在瀏覽頁面中,我們發現了每一頁只瀏覽5條記錄,你可以通過修改程式中定義一個常量'Record_Per_Page'來改變每一頁瀏覽資料記錄的個數。在知道了要瀏覽資料記錄的總數後,通過下面代碼來計算出要顯示這些資料記錄所需要的頁面總數:  

Const Record_Per_Page   As Short = 5 '定義每一頁顯示的記錄數
  Dim nPageCount As Integer '儲存總共的資料頁面數目
  Dim nPage As Integer '存放要瀏覽當前資料頁面號
  nPageCount = nRecCount \ Record_Per_Page
  If nRecCount Mod Record_Per_Page > 0 Then
  nPageCount += 1
  End If
  '確認瀏覽命令中的頁面參數是否越界,如果越界則重設頁面序號
  If nPage < 1  Then
  nPage = 1  
End If
  If  nPage > nPageCount Then
  nPage = nPageCount  
End If  


(4).資料導航的實現方法:  

其實資料導航是通過對參數'Page'賦值來實現的,其中程式中的'nPage'是當前資料頁面序號, 'nPageCount'是資料頁面的總和。下面是實現這些資料導航的具體實現代碼:  

Response.Write ( ' <p >資料導航:<A HREF = ''' & Script_Name & _
  '?Page=' & ( 1 ).ToString ( ) & _
  '''>首  頁 </A >' )
  Response.Write( '      ' )
  '瀏覽'上一頁'處理辦法
  Response.Write ( ' <A HREF = ''' & Script_Name & _
  '?Page=' & ( nPage - 1 ).ToString ( ) & _
  ''' >上一頁</A > ' )
  Response.Write ( '     ' )
  '瀏覽'下一頁'處理辦法
  Response.Write ( '<A HREF =''' & Script_Name &  _
  '?Page=' & ( nPage + 1 ).ToString ( ) & _
  ''' >下一頁</A > ' )
  Response.Write ( '    ' )
  '瀏覽'尾頁'處理辦法
  Response.Write ( '<A HREF = ''' & Script_Name &  _
  '?Page=' & ( nPageCount ).ToString ( ) & _
  ''' >尾  頁</A > ' )
  '顯示當前頁和合計頁數
  Response.Write ( '    ' & '頁次:'& nPage.ToString ( )  & '/' & nPageCount.ToString ( ) & ' <br > ' )  


(5).顯示不同頁面的資料記錄:  

根據超連結字串得到'Page'值,然後根據此值來得到在此頁面中要顯示的起始記錄號和結束記錄號,再通過一個迴圈把這些記錄給顯示出來。下面這行代碼是讀取參數'Page':  

nPage = Convert.ToInt32 ( Request.QueryString ( 'Page' ) )  


下面這些代碼是根據使用者想要去的頁面得到起始記錄號和結尾記錄號,並通過螢幕顯示出來:  

Dim nStart As Integer '存放當前頁面的起始記錄序號
  Dim nEnd As Integer '存放當前頁面的終止記錄序號
  Dim i As Integer  
nStart = Record_Per_Page *  ( nPage - 1 )
  nEnd = nStart + Record_Per_Page - 1
  If nEnd > nRecCount - 1 Then
  nEnd = nRecCount - 1
  End If
  '在螢幕中輸出記錄
  For i = nStart To nEnd
  Response.Write ( DT.Rows ( i ) ( 'ItemName' ) & ' <br > ' )
  Next
    
在本文介紹的二種分頁瀏覽記錄類型中,對於資料顯示,我們採用了簡化處理。我們知道在瀏覽器上,瀏覽記錄一般都是通過DbGrid的形式來實現的,這一點在其實也好實現,讀者只需稍微修改一下本文中的程式碼就可以實現。  

三. 第一種分頁瀏覽資料記錄的完整程式碼(no1.aspx):  

組織一下上面的這些步驟的實現方法,可以得到下列完整代碼:  

<% @ Page Language = 'VB' %>
<% @ Import Namespace = 'System.Data' %>
<% @ Import Namespace = 'System.Data.OleDb' %>
<script runat = 'server' >
Const Record_Per_Page As Short = 5 '定義每一頁顯示的記錄數
Private Script_Name As String  

Sub Page_Load ( Source As Object , e As EventArgs )
Script_Name = GetPageName ( )
'第一種方式來分頁顯示資料
ShowRecords ( )
End Sub
'得到起始瀏覽超連結字串
Function GetPageName ( ) As String
Dim Str As String
Dim Pos As Short
Str = Request.ServerVariables ( 'Script_Name' ).Trim ( )
Pos = Str.LastIndexOf ( '/' )
If Pos >= 0 Then
Return Str.SubString ( Pos + 1 )
Else
Return Str
End If
End Function

'此函數的功能是分頁顯示資料庫中的記錄
Private Sub ShowRecords ( )
Dim strConn As String '定義資料連線字串  
Dim SQL As String '定義SQL語句
Dim odConn As OleDbConnection
Dim odAdapt As OleDbDataAdapter
Dim DS As DataSet '建立DataSet對象
Dim DT As DataTable '建立DataTable對象
Dim nRecCount As Integer '儲存記錄總數
Dim nPageCount As Integer '儲存總共的資料頁面數目
Dim nPage As Integer '存放要瀏覽當前資料頁面號
Dim nStart As Integer '存放當前頁面的起始記錄序號
Dim nEnd As Integer '存放當前頁面的終止記錄序號
Dim i As Integer  

'確認要瀏覽的頁面序號
nPage = Convert.ToInt32 ( Request.QueryString ( 'Page' ) )
SQL = 'SELECT * FROM tblItem '

'建立資料連線字串
strConn = ' Provider = Microsoft.Jet.OLEDB.4.0 ; ' & _
' Data Source = ' & Server.MapPath ( 'data.mdb' ) & ' ; ' & _
' User ID = ; Password = ; '
Try
'得到資料記錄總數
odConn = New OleDbConnection ( strConn )
odAdapt = New OleDbDataAdapter ( SQL , odConn )
DS = New DataSet
odAdapt.Fill ( DS )
DT = DS.Tables ( 0 )
nRecCount = DT.Rows.Count
Catch e As Exception
Response.Write('錯誤資訊: <b>' & e.Message & '</b><p>')
nRecCount = 0
End Try

'判斷是否存在資料記錄
If nRecCount > 0 Then
' 確定資料記錄要顯示的頁面數
nPageCount = nRecCount \ Record_Per_Page
If nRecCount Mod Record_Per_Page > 0 Then
nPageCount += 1
End If

'確認瀏覽命令中的頁面參數是否越界,如果越界則重設頁面序號
If nPage < 1 Then
nPage = 1  
End If
If nPage > nPageCount Then
nPage = nPageCount  
End If

Response.Write ( '總共有資料記錄' & nRecCount.ToString ( ) & ' 條' & '。<br >' )
Response.Write(' <p > <b >第一種分頁顯示為:</b > <p > ' )

'確認當前頁面的開始記錄和終止記錄
nStart = Record_Per_Page * ( nPage - 1 )
nEnd = nStart + Record_Per_Page - 1
If nEnd > nRecCount - 1 Then
nEnd = nRecCount - 1
End If
'在螢幕中輸出記錄
For i = nStart To nEnd
Response.Write ( DT.Rows ( i ) ( 'ItemName' ) & ' <br > ' )
Next
End If
'瀏覽'首頁'處理辦法
Response.Write ( ' <p >資料導航:<A HREF = ''' & Script_Name & _
'?Page=' & ( 1 ).ToString ( ) & _
'''>首 頁 </A >' )
Response.Write( '      ' )
'瀏覽'上一頁'處理辦法
Response.Write ( ' <A HREF = ''' & Script_Name & _
'?Page=' & ( nPage - 1 ).ToString ( ) & _
''' >上一頁</A > ' )
Response.Write ( '     ' )
'瀏覽'下一頁'處理辦法
Response.Write ( '<A HREF =''' & Script_Name & _
'?Page=' & ( nPage + 1 ).ToString ( ) & _
''' >下一頁</A > ' )
Response.Write ( '    ' )
'瀏覽'尾頁'處理辦法
Response.Write ( '<A HREF = ''' & Script_Name & _
'?Page=' & ( nPageCount ).ToString ( ) & _
''' >尾 頁</A > ' )
'顯示當前頁和合計頁數
Response.Write ( '    ' & '頁次:'& nPage.ToString ( ) & '/' & nPageCount.ToString ( ) & ' <br > ' )
End Sub
</script >  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.