实习日常

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值