翻页的WEB控件

总共分三部分:。VB,Builder和Design

Imports System.ComponentModel

Imports System.web.UI.HtmlControls

Imports System.Web.UI

Imports System.Web.UI.WebControls

Imports System.Data

Imports System.Data.OracleClient

 

GetType(ChangePageBuilder)), _

ParseChildren(False), PersistChildren(False), _

Designer(GetType(ChangePageDesigner)), _

ToolboxData("<{0}:ChangePage runat=server>")> Public Class ChangePage

    Inherits System.Web.UI.WebControls.Panel

    Implements INamingContainer

 

    Private WithEvents txtPage As newTextBox

    Private WithEvents btnFirst As newButton

    Private WithEvents btnNext As newButton

    Private WithEvents btnPrevious As newButton

    Private WithEvents btnLast As newButton

    Private WithEvents btnGo As newButton

    Private WithEvents lblNowPage As newLabel

    Private WithEvents lblAllPage As newLabel

    Private WithEvents lblAllItems As newLabel

    Private WithEvents lblPage As newLabel

    Private htmlTabel As Table

    Private htmlRow As TableRow

    Private isCreated As Boolean

    Private mDataGrid As String

 

    Public Event PageIndexChange As EventHandler

 

    Public Sub New()

    End Sub

 

#Region "プロパティ"

   

             NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

             Category("ChildControl"), Description("検索ボタン")> _

             Public ReadOnly Property PageTextBox() As newTextBox

        Get

            Me.EnsureChildControls()

            Return txtPage

        End Get

    End Property

 

   

          NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

          Category("ChildControl"), Description("初頁ボタン")> _

          Public ReadOnly Property FirstPageButton() As newButton

        Get

            Me.EnsureChildControls()

            Return btnFirst

        End Get

    End Property

 

   

             NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

             Category("ChildControl"), Description("次頁ボタン")> _

             Public ReadOnly Property NextPageButton() As newButton

        Get

            Me.EnsureChildControls()

            Return btnNext

        End Get

    End Property

 

   

                     NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                     Category("ChildControl"), Description("前頁ボタン")> _

                     Public ReadOnly Property PrePageButton() As newButton

        Get

            Me.EnsureChildControls()

            Return btnPrevious

        End Get

    End Property

 

   

                    NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                    Category("ChildControl"), Description("末頁ボタン")> _

                    Public ReadOnly Property LastPageButton() As newButton

        Get

            Me.EnsureChildControls()

            Return btnLast

        End Get

    End Property

 

   

                 NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                 Category("ChildControl"), Description("遷移ボタン")> _

                 Public ReadOnly Property ChangePageButton() As newButton

        Get

            Me.EnsureChildControls()

            Return btnGo

        End Get

    End Property

 

   

                 NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                 Category("ChildControl"), Description("現在の頁ラベル")> _

                 Public ReadOnly Property NowPageLabel() As newLabel

        Get

            Me.EnsureChildControls()

            Return lblNowPage

        End Get

    End Property

 

   

                    NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                    Category("ChildControl"), Description("合計頁ラベル")> _

                    Public ReadOnly Property AllPageLabel() As newLabel

        Get

            Me.EnsureChildControls()

            Return lblAllPage

        End Get

    End Property

 

   

                        NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                        Category("ChildControl"), Description("合計項目ラベル")> _

                        Public ReadOnly Property AllItemsLabel() As newLabel

        Get

            Me.EnsureChildControls()

            Return lblAllItems

        End Get

    End Property

 

   

                        NotifyParentProperty(True), PersistenceMode(PersistenceMode.InnerProperty), _

                        Category("ChildControl"), Description("頁ラベル")> _

                        Public ReadOnly Property PageLabel() As newLabel

        Get

            Me.EnsureChildControls()

            Return lblPage

        End Get

    End Property

 

    _

        Public Property DataGrid() As String

        Get

            Return mDataGrid

        End Get

        Set(ByVal Value As String)

            mDataGrid = Value

        End Set

    End Property

 

#End Region

 

    Protected Overrides Sub CreateChildControls()

        htmlTabel = New Table

        htmlRow = New TableRow

 

        If txtPage Is Nothing Then

            isCreated = False

            txtPage = New newTextBox

            txtPage.ID = MyBase.ID & "_PageTextBox"

        Else

            isCreated = True

        End If

 

        If btnFirst Is Nothing Then

            isCreated = False

            btnFirst = New newButton

            btnFirst.ID = MyBase.ID & "_FirstPageButton"

        Else

            isCreated = True

        End If

 

        If btnNext Is Nothing Then

            isCreated = False

            btnNext = New newButton

            btnNext.ID = MyBase.ID & "_NextPageButton"

        Else

            isCreated = True

        End If

 

        If btnPrevious Is Nothing Then

            isCreated = False

            btnPrevious = New newButton

            btnPrevious.ID = MyBase.ID & "_PrePageButton"

        Else

            isCreated = True

        End If

 

        If btnLast Is Nothing Then

            isCreated = False

            btnLast = New newButton

            btnLast.ID = MyBase.ID & "_LastPageButton"

        Else

            isCreated = True

        End If

 

        If btnGo Is Nothing Then

            isCreated = False

            btnGo = New newButton

            btnGo.ID = MyBase.ID & "_ChangePageButton"

        Else

            isCreated = True

        End If

 

        If lblNowPage Is Nothing Then

            isCreated = False

            lblNowPage = New newLabel

            lblNowPage.ID = MyBase.ID & "_NowPageLabel"

        Else

            isCreated = True

        End If

 

        If lblAllPage Is Nothing Then

            isCreated = False

            lblAllPage = New newLabel

            lblAllPage.ID = MyBase.ID & "_AllPageLabel"

        Else

            isCreated = True

        End If

 

        If lblAllItems Is Nothing Then

            isCreated = False

            lblAllItems = New newLabel

            lblAllItems.ID = MyBase.ID & "_AllItemsLabel"

        Else

            isCreated = True

        End If

 

        If lblPage Is Nothing Then

            isCreated = False

            lblPage = New newLabel

            lblPage.ID = MyBase.ID & "_PageLabel"

        Else

            isCreated = True

        End If

 

        MyBase.CreateChildControls()

 

        If isCreated = False Then

            lblPage.Text = "頁へ"

            btnFirst.Text = "初頁"

            btnPrevious.Text = "前頁"

            btnNext.Text = "次頁"

            btnLast.Text = "末頁"

            btnGo.Text = "遷移"

            lblNowPage.Text = "0"

            lblAllPage.Text = "/0頁"

            lblAllItems.Text = "  全て:0件"

            txtPage.Width = Unit.Pixel(40)

        End If

 

        htmlTabel.CellPadding = 0

        htmlTabel.CellSpacing = 0

        htmlTabel.Rows.Add(htmlRow)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(0).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(0).Controls.Add(btnFirst)

        htmlRow.Cells(0).Controls.Add(btnPrevious)

        htmlRow.Cells(0).Controls.Add(btnNext)

        htmlRow.Cells(0).Controls.Add(btnLast)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(1).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(1).Controls.Add(txtPage)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(2).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(2).Controls.Add(lblPage)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(3).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(3).Controls.Add(btnGo)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(4).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(4).Controls.Add(lblNowPage)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(5).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(5).Controls.Add(lblAllPage)

        htmlRow.Cells.Add(New TableCell)

        htmlRow.Cells(6).HorizontalAlign = HorizontalAlign.Left

        htmlRow.Cells(6).Controls.Add(lblAllItems)

 

        MyBase.Controls.Add(htmlTabel)

 

    End Sub

 

    Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

        MyBase.EnsureChildControls()

        RenderChildren(output)

    End Sub

 

    Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)

        Dim btnIdName As Array

        Dim lblIdName As Array

 

        If TypeOf obj Is newTextBox Then

            txtPage = obj

        End If

 

        If TypeOf obj Is newButton Then

            btnIdName = Split(CType(obj, newButton).ID.ToString, "_")

            Select Case btnIdName(1).ToString

                Case "FirstPageButton"

                    Me.btnFirst = obj

                Case "NextPageButton"

                    Me.btnNext = obj

                Case "PrePageButton"

                    Me.btnPrevious = obj

                Case "LastPageButton"

                    Me.btnLast = obj

                Case "ChangePageButton"

                    Me.btnGo = obj

            End Select

        End If

 

        If TypeOf obj Is newLabel Then

            lblIdName = Split(CType(obj, newLabel).ID.ToString, "_")

            Select Case lblIdName(1).ToString

                Case "NowPageLabel"

                    Me.lblNowPage = obj

                Case "AllPageLabel"

                    Me.lblAllPage = obj

                Case "AllItemsLabel"

                    Me.lblAllItems = obj

                Case "PageLabel"

                    Me.lblPage = obj

            End Select

        End If

 

    End Sub

 

    Private Sub btnFirst_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFirst.Click

        MyBase.EnsureChildControls()

        If Not Page.FindControl(DataGrid) Is Nothing Then

            CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex = 0

            txtPage.Text = ""

            RaiseEvent PageIndexChange(Me, e)

            Call NewPageDataBind()

        Else

            Throw New Exception(DataGrid & "を探し当てていない")

        End If

    End Sub

 

    Private Sub btnLast_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLast.Click

        Dim pageCount As Integer

        MyBase.EnsureChildControls()

 

        If Not Page.FindControl(DataGrid) Is Nothing Then

            pageCount = CType(Page.FindControl(DataGrid), DataGrid).PageCount

            CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex = _

                Math.Max(pageCount - 1, 0)

            txtPage.Text = ""

            RaiseEvent PageIndexChange(Me, e)

            Call NewPageDataBind()

        Else

            Throw New Exception(DataGrid & "を探し当てていない")

        End If

    End Sub

 

    Private Sub btnNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNext.Click

        Dim currentPageIndex As Integer

        Dim pageCount As Integer

        MyBase.EnsureChildControls()

 

        If Not Page.FindControl(DataGrid) Is Nothing Then

            pageCount = CType(Page.FindControl(DataGrid), DataGrid).PageCount

            currentPageIndex = CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex

            CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex = _

                               Math.Min(currentPageIndex + 1, pageCount - 1)

            txtPage.Text = ""

            RaiseEvent PageIndexChange(Me, e)

            Call NewPageDataBind()

        Else

            Throw New Exception(DataGrid & "を探し当てていない")

        End If

    End Sub

 

    Private Sub btnPrevious_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrevious.Click

        Dim currentPageIndex As Integer

        MyBase.EnsureChildControls()

 

        If Not Page.FindControl(DataGrid) Is Nothing Then

            currentPageIndex = CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex

            CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex = _

            Math.Max(currentPageIndex - 1, 0)

            txtPage.Text = ""

            RaiseEvent PageIndexChange(Me, e)

            Call NewPageDataBind()

        Else

            Throw New Exception(DataGrid & "を探し当てていない")

        End If

    End Sub

 

    Public Sub NewPageDataBind()

        Dim recordCount As Integer

        Dim pageCount As Integer

        Dim pageDgdSize As Integer

        Dim CurrentPageIndex As Integer

 

        CurrentPageIndex = CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex

        pageDgdSize = CType(Page.FindControl(DataGrid), DataGrid).PageSize

        pageCount = CType(Page.FindControl(DataGrid), DataGrid).PageCount

 

        If (CType(Page.FindControl(DataGrid), DataGrid).DataSource Is Nothing) Then

            SetButtonState(0, CurrentPageIndex)

            Exit Sub

        End If

 

        If (CType(Page.FindControl(DataGrid), DataGrid).DataSource.GetType().ToString(). _

            ToLower() = "system.data.datatable") Then

            recordCount = CType(Page.FindControl(DataGrid), DataGrid).DataSource.Rows.Count

        ElseIf (CType(Page.FindControl(DataGrid), DataGrid).DataSource.GetType().ToString(). _

            ToLower() = "system.data.dataview") Then

            recordCount = CType(Page.FindControl(DataGrid), DataGrid).DataSource.Count

        ElseIf (CType(Page.FindControl(DataGrid), DataGrid).DataSource.GetType().ToString(). _

            ToLower() = "system.data.dataset") Then

            recordCount = CType(Page.FindControl(DataGrid), DataGrid).DataSource.Tables(0). _

                Rows.Count

        End If

 

        If pageCount.ToString = 0 Then

            lblNowPage.Text = 0

        Else

            lblNowPage.Text = _

                (CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex + 1).ToString()

        End If

 

        lblAllPage.Text = "/" & pageCount.ToString() & "頁"

        lblAllItems.Text = "  全て:" & recordCount.ToString() & "件"

        SetButtonState(pageCount, CurrentPageIndex)

    End Sub

 

    Public Sub SetButtonState(ByVal pageCount As Integer, ByVal CurrentPageIndex As Integer)

        btnFirst.Enabled = (0 < CurrentPageIndex)

        btnPrevious.Enabled = (0 < CurrentPageIndex)

        btnNext.Enabled = (CurrentPageIndex < pageCount - 1)

        btnLast.Enabled = (CurrentPageIndex < pageCount - 1)

        btnGo.Enabled = (1 < pageCount)

        txtPage.Enabled = (1 < pageCount)

    End Sub

 

    Private Sub btnGo_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGo.Click

        Dim PageCount As Integer

 

        If Not Page.FindControl(DataGrid) Is Nothing Then

            PageCount = CType(Page.FindControl(DataGrid), DataGrid).PageCount

        Else

            Throw New Exception(DataGrid & "を探し当てていない")

            Exit Sub

        End If

 

        If txtPage.Text.ToString.Equals("") Then

            Exit Sub

        Else

            If PageCount < CInt(txtPage.Text) Then

                txtPage.Text = ""

                Exit Sub

            Else

                If Math.Min(PageCount - 1, CInt(txtPage.Text) - 1) < 0 Then

                    txtPage.Text = ""

                    Exit Sub

                End If

                CType(Page.FindControl(DataGrid), DataGrid).CurrentPageIndex = _

                    Math.Min(PageCount - 1, CInt(txtPage.Text) - 1)

                txtPage.Text = ""

                RaiseEvent PageIndexChange(Me, e)

                Call NewPageDataBind()

            End If

        End If

 

    End Sub

 

    Private Sub ChangePage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        MyBase.EnsureChildControls()

        If DataGrid Is Nothing Then

            Throw New Exception("必要なDataGridプロパティが設定されていない")

            Exit Sub

        End If

        If Not Page.FindControl(DataGrid) Is Nothing Then

            Call NewPageDataBind()

        Else

            Throw New Exception(DataGrid & "を探し当てていない")

        End If

    End Sub

End Class

  

Imports System.ComponentModel

Imports System.Web.UI

 

Public Class ChangePageBuilder

    Inherits ControlBuilder

 

    Public Overrides Function GetChildControlType(ByVal tagName As String, ByVal attributes As IDictionary) As Type

       

        If tagName.ToLower().EndsWith("newtextbox") Then

            Return GetType(newTextBox)

        End If

 

        If tagName.ToLower().EndsWith("newbutton") Then

            Return GetType(newButton)

        End If

 

        If tagName.ToLower().EndsWith("newlabel") Then

            Return GetType(newLabel)

        End If

        Return Nothing

    End Function

End Class

 

Imports System.IO

Imports System.Web.UI

Imports System.Web.UI.WebControls

Imports System.Web.UI.Design

Imports System.ComponentModel

Imports System.ComponentModel.Design

 

Public Class ChangePageDesigner

    Inherits ControlDesigner

 

    Public Overrides Function GetDesignTimeHtml() As String

        Dim strWriter As StringWriter       

        Dim htmlWriter As HtmlTextWriter   

        Dim control As ChangePage          

 

        strWriter = New StringWriter

        htmlWriter = New HtmlTextWriter(strWriter)

        control = CType(Me.Component, ChangePage)

        MyBase.GetDesignTimeHtml()

 

        If Not control.HasControls Then

            Return GetEmptyDesignTimeHtml()

        End If

 

        control.RenderControl(htmlWriter)

        Return strWriter.ToString

    End Function

 

    Public Overrides Function GetPersistInnerHtml() As String

        Dim strWriter As StringWriter       

        Dim htmlWriter As HtmlTextWriter   

        Dim control As ChangePage         

 

        strWriter = New StringWriter

        htmlWriter = New HtmlTextWriter(strWriter)

        control = CType(Me.Component, ChangePage)

        MyBase.GetPersistInnerHtml()

        htmlWriter.Write(ControlPersister.PersistControl(control.FirstPageButton))

        htmlWriter.Write(ControlPersister.PersistControl(control.PrePageButton))

        htmlWriter.Write(ControlPersister.PersistControl(control.NextPageButton))

        htmlWriter.Write(ControlPersister.PersistControl(control.LastPageButton))

        htmlWriter.Write(ControlPersister.PersistControl(control.PageTextBox))

        htmlWriter.Write(ControlPersister.PersistControl(control.PageLabel))

        htmlWriter.Write(ControlPersister.PersistControl(control.ChangePageButton))

        htmlWriter.Write(ControlPersister.PersistControl(control.NowPageLabel))

        htmlWriter.Write(ControlPersister.PersistControl(control.AllPageLabel))

        htmlWriter.Write(ControlPersister.PersistControl(control.AllItemsLabel))

        Return strWriter.ToString

    End Function

 

End Class

你可能感兴趣的:(asp.net)