在使用DataGridView顯示來自DataTable的記錄時,如果DataTable裏的記錄太多(上百條),那麼用DataGridView查看記錄就很不方便,如果能讓DataGridView分頁顯示,每頁只顯示10條(可以隨意規定每頁顯示的條數),並且配以頁面之間的跳轉按鈕,豈不是方面了許多?現在就來說說我是怎麼做到的吧。
我自己編寫了一個類用於輔助DataGridView控件的記錄分頁顯示,並提供頁面跳轉的方法。下面是這個類的源代碼:
http://download1.csdn.net/down3/20070610/10102852142.vb
Public Class ClsDataGridViewPage
'每頁記錄數
Private _RowsPerPage As Integer
'總頁數
Private _TotalPage As Integer
'當前頁數
Private _curPage As Integer = 0
'要分頁的DataGridView
Private _DataGridView As Windows.Forms.DataGridView
'與需要分頁顯示的的DataView
Private _dv As DataView
'獲取與設置每頁記錄數
Public Property RowsPerPage() As Integer
Get
Return _RowsPerPage
End Get
Set(ByVal value As Integer)
_RowsPerPage = value
End Set
End Property
'獲取總頁數
Public ReadOnly Property TotalPage() As Integer
Get
Return _TotalPage
End Get
End Property
'獲取與設置當前頁數
Public Property curPage() As Integer
Get
Return _curPage
End Get
Set(ByVal value As Integer)
_curPage = value
End Set
End Property
'設置需要分頁的GetDataGridView
Public WriteOnly Property SetDataGridView()
Set(ByVal value As Object)
_DataGridView = value
End Set
End Property
'設置需要分頁顯示的的DataView
Public WriteOnly Property SetDataView()
Set(ByVal value As Object)
_dv = value
End Set
End Property
Public Sub New()
End Sub
'重載NEW函數,在構造時就可以對成員賦值
Public Sub New(ByVal datagridview As Windows.Forms.DataGridView, ByVal dv As DataView, _
ByVal RowsPerPage As Integer)
_DataGridView = datagridview
_dv = dv
_RowsPerPage = RowsPerPage
End Sub
'開始分頁啦
Public Sub Paging()
'首先判斷DataView中的記錄數是否足夠形成多頁,
'如果不能,那麼就只有一頁,且DataGridView需要顯示的記錄等同於“最後一頁”的記錄
If _dv.Count <= _RowsPerPage Then
_TotalPage = 1
GoLastPage()
Exit Sub
End If
'可以分爲多頁的話就要計算總的頁數咯,然後DataGridView顯示第一頁
If _dv.Count Mod _RowsPerPage = 0 Then
_TotalPage = Int(_dv.Count / _RowsPerPage)
Else
_TotalPage = Int(_dv.Count / _RowsPerPage) + 1
End If
GoFirstPage()
End Sub
'到第一頁
Public Sub GoFirstPage()
'如果只有一頁,那麼顯示的記錄等同於“最後一頁”的記錄
If _TotalPage = 1 Then
GoLastPage()
Exit Sub
End If
'如果有多頁,就到第“1”頁
_curPage = 0
GoNoPage(_curPage)
End Sub
Public Sub GoNextPage()
'這段代碼主要是爲了防止當前頁號溢出
_curPage += 1
If _curPage > _TotalPage - 1 Then
_curPage = _TotalPage - 1
Exit Sub
End If
'如果到了最後一頁,那就顯示最後一頁的記錄
If _curPage = _TotalPage - 1 Then
GoLastPage()
Exit Sub
End If
'如果沒到最後一頁,就到指定的“下一頁”
GoNoPage(_curPage)
End Sub
Public Sub GoPrevPage()
'防止不合法的當前頁號
_curPage -= 1
If _curPage < 0 Then
_curPage = 0
Exit Sub
End If
'到指定的“上一頁”
GoNoPage(_curPage)
End Sub
'到最後一頁
Public Sub GoLastPage()
_curPage = _TotalPage - 1
Dim i As Integer
Dim dt As New DataTable
'dt只是個臨時的DataTable,用來獲取所需頁數的記錄
dt = _dv.ToTable.Clone
For i = (_TotalPage - 1) * _RowsPerPage To _dv.Count - 1
'i值上下限很關鍵,調試的時候常常這裏報錯找不到行
'就是因爲i值溢出
Dim dr As DataRow = dt.NewRow
dr.ItemArray = _dv.ToTable.Rows(i).ItemArray
dt.Rows.Add(dr)
Next
_DataGridView.DataSource = dt
End Sub
'到指定的頁
Public Sub GoNoPage(ByVal PageNo As Integer)
_curPage = PageNo
'防止不合法的頁號
If _curPage < 0 Then
MsgBox("頁號不能小於1")
Exit Sub
End If
'防止頁號溢出
If _curPage >= _TotalPage Then
MsgBox("頁號超出上限")
Exit Sub
End If
'如果頁號是最後一頁,就顯示最後一頁
If _curPage = _TotalPage - 1 Then
GoLastPage()
Exit Sub
End If
'不是最後一頁,那顯示指定頁號的頁
Dim dt As New DataTable
dt = _dv.ToTable.Clone
Dim i As Integer
For i = PageNo * _RowsPerPage To (PageNo + 1) * _RowsPerPage - 1
Dim dr As DataRow = dt.NewRow
dr.ItemArray = _dv.ToTable.Rows(i).ItemArray
dt.Rows.Add(dr)
Next
_DataGridView.DataSource = dt
End Sub
End Class
現在舉例介紹一下怎麼使用這個類(以下簡稱分頁輔助類)來幫助DataGridView控件分頁顯示記錄:
首先,在DataGridView所在的窗體類代碼中加入該分頁輔助類的成員:
Private dgvPage As ClsDataGridViewPage
然後在窗體的構造函數代碼中實例化這個成員:
Public Sub New()
' 此調用是 Windows 窗體設計器所必需的。
InitializeComponent()
' 在 InitializeComponent() 調用之後添加任何初始化。
'實例化分頁類成員
dgvPage = New ClsDataGridViewPage '分頁類成員
End Sub
注意:要想讓DataGridView分頁顯示記錄,最關鍵的需要設置的分頁類的三個屬性是:
SetDataGridView 該屬性用於設置窗體上要分頁顯示記錄的DataGridView控件
RowsPerPage 該屬性用來設置每頁需要顯示的記錄數
SetDataView 該屬性用來設置需要在DataGridView空間上顯示的DataView
可以靈活地設置這三個屬性,以滿足不同的DataGridView對不同的DataView進行指定每頁記錄數的顯示(是不是很方便?)現在舉例如何設置這三個屬性:
'設置分頁類對象的屬性
dgvPage.GetDataGridView = Me.DataGridView1 '需要分頁的是 Me.DataGridView1
dgvPage.RowsPerPage = 10 '每頁顯示10條記錄
'獲取需要分頁顯示的DataView
Dim dt As DataTable = Me.DataGridView1.DataSource
dgvPage.SetDataView = dt.DefaultView
上述屬性設置的過程要在DataGridView第一次設置DataSource時進行。(因爲實現分頁類實現DataGridView的分頁顯示是通過改變DataGridView的DataSource屬性實現的。當然,可以在任何時候將想要在DataGridView中分頁顯示的DataView賦給dgvPage.SetDataView ,比如:
dim dv as new DataView=......
dgvPage.SetDataView = dv
這樣DataGridView裏顯示的記錄可以動態地變化。)
剩下的事就簡單啦:要實現DataGridView的記錄分頁顯示,調用分頁類的Paging 方法,
要看第一頁,調用分頁類的GoFirstPage方法
要看下一頁,調用 GoNextPage方法
要看前一頁,調用GoPrevPage方法
要看最後一頁,調用GoLastPage方法
要看指定頁號的頁,調用 GoNoPage方法
只要靈活使用好了這個類,你的DataGridView控件的分頁功能絕不成問題。而且隨時都能瞭解當前到了第幾頁(curPage()+1),一共有多少頁(TotalPage())