VS2005 自定義控件 Datagridview實現分頁的源代碼 (VB)

在論壇得到不少幫助,十分感謝那些無私分享源代碼的兄弟,今天在別的論壇看有人求助datagridview分頁就寫了一個,現在分享給大家。

首先創建一個類庫項目  
在自動創建的class1的代碼頁裏複製以下代碼,然後生成dll 直接託放到工具欄裏使用

源代碼
Public Class PageDataGridview
    Inherits System.Windows.Forms.DataGridView
    Private ds As New DataSet
    Private ToltalPage As Integer = 1
    Private NowPage As Integer = 1
    Private OnePageRow As Integer
    Private nowrowno As Integer = 0

    Public Property PageSize() As Integer
        Get
            Return OnePageRow
        End Get
        Set(ByVal value As Integer)
            If value < 0 Then
                Exit Property
            End If
            OnePageRow = value
        End Set
    End Property
    Public ReadOnly Property CurrentPage() As Integer
        Get
            Return NowPage
        End Get
    End Property

    Public ReadOnly Property Toltal_Page() As Integer
        Get
            Return ToltalPage
        End Get
    End Property

    Private Sub PageDataGridview_DataSourceChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DataSourceChanged
        Dim Datagrid As DataGridView = CType(sender, DataGridView)

        If CType(Datagrid.DataSource, DataTable).Rows.Count > 0 Then
            ToltalPage = 1
            NowPage = 1
            If PageSize = 0 Then
                Exit Sub
            End If
            Dim table As DataTable = CType(Datagrid.DataSource, DataTable)
            Dim tol As Integer = table.Rows.Count
            Dim temptolpage As Integer = CInt(Int(tol / PageSize))
            If temptolpage * PageSize >= tol Then
                ToltalPage = temptolpage
            Else
                ToltalPage = temptolpage + 1
            End If
            nowrowno = 0
            ds.Tables.Clear()
            For tbcount As Integer = 0 To ToltalPage - 1
                Dim temptable As New DataTable
                For i As Integer = 0 To CType(Datagrid.DataSource, DataTable).Columns.Count - 1
                    Dim col As New DataColumn
                    col.ColumnName = CType(Datagrid.DataSource, DataTable).Columns(i).ColumnName
                    temptable.Columns.Add(col)
                Next
                For s As Integer = 1 To PageSize
                    If nowrowno = CType(Datagrid.DataSource, DataTable).Rows.Count Then
                        Exit For
                    End If
                    temptable.ImportRow(CType(Datagrid.DataSource, DataTable).Rows(nowrowno))
                    nowrowno += 1
                Next
                ds.Tables.Add(temptable)
            Next
            If ds.Tables.Count > 0 Then
                CType(Datagrid.DataSource, DataTable).Rows.Clear()
                For n As Integer = 0 To PageSize - 1
                    CType(Datagrid.DataSource, DataTable).ImportRow(ds.Tables(0).Rows(n))
                Next
            End If
        End If
    End Sub
    Public Sub ToNext()
        If Me.DataSource Is Nothing Then
            Exit Sub
        End If
        If NowPage = ToltalPage Then
            MsgBox("已經到最後一頁")
        Else
            CType(Me.DataSource, DataTable).Rows.Clear()
            For i As Integer = 0 To ds.Tables(NowPage).Rows.Count - 1
                CType(Me.DataSource, DataTable).ImportRow(ds.Tables(NowPage).Rows(i))
            Next
            NowPage += 1
        End If
    End Sub
    Public Sub ToUp()
        If Me.DataSource Is Nothing Then
            Exit Sub
        End If
        If NowPage = 1 Then
            MsgBox("已經到第一頁")
        Else
            CType(Me.DataSource, DataTable).Rows.Clear()
            For i As Integer = 0 To ds.Tables(NowPage - 2).Rows.Count - 1
                CType(Me.DataSource, DataTable).ImportRow(ds.Tables(NowPage - 2).Rows(i))
            Next
            NowPage -= 1
        End If

    End Sub
    Public Sub ToFirst()
        If Me.DataSource Is Nothing Then
            Exit Sub
        End If
        If NowPage = 1 Then
            MsgBox("已經到第一頁")
        Else
            CType(Me.DataSource, DataTable).Rows.Clear()
            For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
                CType(Me.DataSource, DataTable).ImportRow(ds.Tables(0).Rows(i))
            Next
            NowPage = 1
        End If
    End Sub
    Public Sub ToLast()
        If Me.DataSource Is Nothing Then
            Exit Sub
        End If
        If NowPage = ToltalPage Then
            MsgBox("已經到最後一頁")
        Else
            CType(Me.DataSource, DataTable).Rows.Clear()
            For i As Integer = 0 To ds.Tables(ToltalPage - 1).Rows.Count - 1
                CType(Me.DataSource, DataTable).ImportRow(ds.Tables(ToltalPage - 1).Rows(i))
            Next
            NowPage = ToltalPage
        End If
    End Sub
End Class


PageSize      屬性 設置每頁顯示的數據條數
CurrentPage   屬性 返回當前頁數
Toltal_Page   屬性 返回總頁數
ToNext        方法 顯示下一頁
ToUp          方法  顯示上一頁
ToFirst       方法 顯示第一頁
ToLast        顯示最後一頁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章