求助关于vb.net+access,中datagridview实现数据分页,网上给出个类,可是在程序中不能成功实现分页,请指教

ailove1986 2014-09-23 07:55:31
分页类代码
Public Class ClsDataGridViewPage
Private _RowsPerPage As Integer '每页记录数
Private _TotalPage As Integer '总页数
Private _curPage As Integer = 0 '当前页数
Private _DataGridView As Windows.Forms.DataGridView '要分页的DataGridView
Private _dv As DataView '与需要分页显示的的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

'设置需要分页的SetDataGridView
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分页显示
...全文
348 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpilip 2015-07-21
  • 打赏
  • 举报
回复
GoNoPage()方法怎么调用
ailove1986 2014-09-26
  • 打赏
  • 举报
回复
能不能把其他的几个按钮代码给我参考一下啊
liuxun1997 2014-09-25
  • 打赏
  • 举报
回复
不会弹出分页窗口,"分页浏览"代码如下,
Private Sub btnfirst_Click(sender As Object, e As EventArgs) Handles btnfirst.Click
        PageNew()   'start paging
        btnfirst.Enabled = True
        btnPrevPage.Enabled = True
        btnGoNoPage.Enabled = True
        btnNextPage.Enabled = True
        btnLastPage.Enabled = True
        txtPage.Text = "1"
        txtPage.Enabled = True
        dgvPage.GoFirstPage()
        lblcur.Text = ",第 " & dgvPage.curPage + 1 & " 页"
        btnfirst.Enabled = False
    End Sub
ailove1986 2014-09-25
  • 打赏
  • 举报
回复
调用PageNew()时这句话dt As DataTable = Me.DataGridView1.DataSource报错
ailove1986 2014-09-25
  • 打赏
  • 举报
回复
引用 3 楼 liuxun1997 的回复:
我知道
这个是我想的效果,只是这是在点击分页浏览后又弹出个分页窗口么?我这个还是显示的全部啊
liuxun1997 2014-09-25
  • 打赏
  • 举报
回复
我用的VS2013木有报错

ailove1986 2014-09-25
  • 打赏
  • 举报
回复
我会了!这样写dt As DataTable = Me.Device_tableTableAdapter.GetData
ailove1986 2014-09-25
  • 打赏
  • 举报
回复
引用 5 楼 liuxun1997 的回复:
 Public Sub PageNew()
        dgvPage.SetDataGridView = Me.dgvq '需要分页的是 Me.DataGridView1
        dgvPage.RowsPerPage = 25 '每页显示10条记录

        '获取需要分页显示的DataView
        Dim dt As DataTable = Me.dgvq.DataSource
        dgvPage.SetDataView = dt.DefaultView

        dgvPage.Paging()
        'dgvPage.GoLastPage()
        lblpage.Text = "共" & dgvPage.TotalPage & "页"
        lblcur.Text = ",第 1 页"
    End Sub
分页代码中的Dim dt As DataTable = Me.dgvq.DataSource这句报错,就是上面那个转换类型的
liuxun1997 2014-09-24
  • 打赏
  • 举报
回复
 Public Sub PageNew()
        dgvPage.SetDataGridView = Me.dgvq '需要分页的是 Me.DataGridView1
        dgvPage.RowsPerPage = 25 '每页显示10条记录

        '获取需要分页显示的DataView
        Dim dt As DataTable = Me.dgvq.DataSource
        dgvPage.SetDataView = dt.DefaultView

        dgvPage.Paging()
        'dgvPage.GoLastPage()
        lblpage.Text = "共" & dgvPage.TotalPage & "页"
        lblcur.Text = ",第 1 页"
    End Sub
liuxun1997 2014-09-24
  • 打赏
  • 举报
回复
 Dim dgvPage As New ClsDataGridViewPage '分页类成员
liuxun1997 2014-09-24
  • 打赏
  • 举报
回复
我知道
ailove1986 2014-09-24
  • 打赏
  • 举报
回复
这个怎么用啊,难道没人知道?
ailove1986 2014-09-23
  • 打赏
  • 举报
回复
开发程序用的vs2008

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧