vb.net小白的开发日常
研究了一整天的vb.net分页功能,发现这个需求不用做。。。(是该开心呢?还是开心呢?)
研究了一整天也算是研究出来了
由于不熟悉vb.net和DataGridView控件的使用,所以进行了较长时间的百度型研究;
经过一段时间的分析,我决定通过建立一个PageDataGridViewPage(命名就这水平了…)类,通过实例化该类实现分页功能(一堆废话凑字数…)
上代码:
Imports System.Collections.Generic
Imports DentalLibrary.ShowToothPosition
Public Class PageDataGridViewPage
'<---test---->
Private _RowsPerPage As Integer '每页记录数
Private _TotalPage As Integer '总页数
Private _CurrentPage As Integer '当前页数
Private _tempDetail As New List(Of DeptProcessDetail) '要分页的List
'Private _dv As DataView '需要分页显示的DataView
'<----test--->
'<---test---->
'获取与设置每页记录数
Public Property RowsPerPage() As Integer
Get
Return _RowsPerPage
End Get
Set(ByVal value As Integer)
_RowsPerPage = value
End Set
End Property
'获取总页数
Public Property TotalPage() As Integer
Get
Return _TotalPage
End Get
Set(value As Integer)
_TotalPage = value
End Set
End Property
'获取与设置当前页数
Public Property CurrentPage() As Integer
Get
Return _CurrentPage
End Get
Set(ByVal value As Integer)
_CurrentPage = value
End Set
End Property
'设置需要分页的SetDataGridView
Public Property SetTempDetail() As List(Of DeptProcessDetail)
Get
Return _tempDetail
End Get
Set(ByVal value As List(Of DeptProcessDetail))
_tempDetail = value
End Set
End Property
'设置分页显示的DataView
'Public WriteOnly Property SetDataView() As DataView
' Set(ByVal value As DataView)
' _dv = value
' End Set
'End Property
Public Sub New()
' 此调用是设计器所必需的。
'InitializeComponent()
' 在 InitializeComponent() 调用之后添加任何初始化。
End Sub
'重载New函数,在构造时对成员赋值
Public Sub New(ByVal TempDetailLst As List(Of DeptProcessDetail), ByVal RowsPerPage As Integer)
_tempDetail = TempDetailLst
_RowsPerPage = RowsPerPage
End Sub
'分页
Public Sub Paging()
'判断DataView中的记录数是否足够形成多页,
'若不能,则只有一页
If _tempDetail.Count <= _RowsPerPage Then
_TotalPage = 1
GoLastPage()
Exit Sub
End If
'若能分多页
If _tempDetail.Count Mod _RowsPerPage = 0 Then
_TotalPage = Int(_tempDetail.Count / _RowsPerPage)
Else
_TotalPage = Int(_tempDetail.Count / _RowsPerPage) + 1
End If
GoFirstPage()
End Sub
'到第一页
Public Sub GoFirstPage()
'若只有一页
If _TotalPage = 1 Then
GoLastPage()
Exit Sub
End If
'若有多页
_CurrentPage = 0
GoNoPage(_CurrentPage)
End Sub
Public Sub GoNextPage()
_CurrentPage += 1
If _CurrentPage > _TotalPage - 1 Then
_CurrentPage = _TotalPage - 1
Exit Sub
End If
'若已达最后一页,则显示最后一页
If _CurrentPage = _TotalPage - 1 Then
GoLastPage()
Exit Sub
End If
'若未到最后一页,就到指定下一页
GoNoPage(_CurrentPage)
End Sub
Public Sub GoPrevPage()
_CurrentPage -= 1
If _CurrentPage < 0 Then
_CurrentPage = 0
Exit Sub
End If
GoNoPage(_CurrentPage)
End Sub
Public Sub GoLastPage()
Dim LastTempDetail As New List(Of DeptProcessDetail)
LastTempDetail = _tempDetail.GetRange((TotalPage - 1) * _RowsPerPage, _tempDetail.Count)
_tempDetail = LastTempDetail
End Sub
Public Sub GoNoPage(ByVal PageNo As Integer)
_CurrentPage = PageNo
If _CurrentPage < 0 Then
MsgBox("页号不能小于1")
Exit Sub
End If
'防止页号溢出
If _CurrentPage >= _TotalPage Then
MsgBox("页号超出上限")
Exit Sub
End If
'页号为最后一页
If _CurrentPage = _TotalPage - 1 Then
GoLastPage()
Exit Sub
End If
'不是最后一页
Dim NotLastTempDetail As New List(Of DeptProcessDetail)
Dim startLocation As Integer = PageNo * _RowsPerPage
Dim endLocation As Integer = (PageNo + 1) * _RowsPerPage
If endLocation < RowsPerPage Then
NotLastTempDetail = _tempDetail.GetRange(startLocation, endLocation)
Else
NotLastTempDetail = _tempDetail.GetRange(startLocation, RowsPerPage)
End If
_tempDetail = NotLastTempDetail
End Sub
End Class