vb DataGrid

vb DataGrid,第1张

概述VB.NET使用DataGridView分页显示(转)   在使用DataGridView显示来自DataTable的记录时,如果DataTable里的记录太多(上百条),那么用DataGridView查看记录就很不方便,如果能让DataGridView分页显示,每页只显示10条(可以随意规定每页显示的条数),并且配以页面之间的跳转按钮,岂不是方面了许多?现在就来说说我是怎么做到的吧。 我自己编写 VB.NET使用DataGrIDVIEw分页显示(转)
在使用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())

总结

以上是内存溢出为你收集整理的vb DataGrid全部内容,希望文章能够帮你解决vb DataGrid所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1280541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存