⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultvb.aspx.vb

📁 Telerik是很大的第三方软件制造商
💻 VB
字号:
Imports System
Imports System.Data
Imports System.Collections
Imports System.Web.SessionState
Imports Telerik.QuickStart
Imports Telerik.WebControls


Namespace Telerik.GridExamplesVBNET.Programming.CustomPaging

    Public MustInherit Class DefaultVB
        Inherits XhtmlPage
        Protected WithEvents RadGrid1 As RadGrid

        Protected TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected RegularExpressionValidator1 As System.Web.UI.WebControls.RegularExpressionValidator
        Protected RequiredFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator

        'Custom paging
        Private startIndex As Integer = 0

        Private myDataLayer1 As DataLayer

        Private ReadOnly Property MyDataLayer() As DataLayer
            Get
                If (Me.myDataLayer1 Is Nothing) Then
                    Me.myDataLayer1 = New DataLayer(Me.Session)
                End If

                Return Me.myDataLayer1
            End Get
        End Property

        Private Sub PageChanging(ByVal newPageIndex As Integer)
            'change page, so datalayer to generate fresh one
            Me.MyDataLayer.ResetDataSource()
            'Update start based on grid's new page index changes
            startIndex = newPageIndex * RadGrid1.MasterTableView.PageSize
        End Sub


#Region "Web Form Designer generated code"

        Protected Overrides Sub OnInit(ByVal e As EventArgs)
            InitializeComponent()
            MyBase.OnInit(e)
        End Sub

        Private Sub InitializeComponent()
        End Sub
#End Region

        Private Sub RadGrid1_NeedDataSource(ByVal [source] As Object, ByVal e As GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
            RadGrid1.DataSource = Me.MyDataLayer.GetDataSource(Me.startIndex, RadGrid1.MasterTableView.PageSize).DefaultView()
        End Sub

        Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
            If Not IsPostBack Then
                Me.MyDataLayer.Initialize(Integer.Parse(TextBox1.Text))
            End If
        End Sub

        Private Sub RadGrid1_PageIndexChanged(ByVal source As Object, ByVal e As Telerik.WebControls.GridPageChangedEventArgs) Handles RadGrid1.PageIndexChanged
            'Update start index when page index changes
            Me.PageChanging(e.NewPageIndex)
        End Sub

        Private Sub RadGrid1_DeleteCommand(ByVal source As Object, ByVal e As Telerik.WebControls.GridCommandEventArgs) Handles RadGrid1.DeleteCommand
            Dim id As Integer = Integer.Parse(CType(e.Item, GridDataItem)("ID").Text)
            Me.MyDataLayer.DeleteItem(id)

            'Update count based on number of records left
            RadGrid1.MasterTableView.VirtualItemCount = Me.MyDataLayer.Count

            'Set new page index
            If (RadGrid1.MasterTableView.VirtualItemCount = 0) Then
                RadGrid1.MasterTableView.CurrentPageIndex = 0
            Else
                Dim lastPageIndex As Integer = ((RadGrid1.MasterTableView.VirtualItemCount + RadGrid1.MasterTableView.PageSize - 1) \ _
                RadGrid1.MasterTableView.PageSize) - 1
                If (RadGrid1.MasterTableView.CurrentPageIndex > lastPageIndex) Then
                    RadGrid1.MasterTableView.CurrentPageIndex = lastPageIndex
                End If
            End If

            'Update start index, calculation vars
            Me.PageChanging(RadGrid1.MasterTableView.CurrentPageIndex)
        End Sub


        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.PageChanging(0)
            Me.MyDataLayer.Initialize(Integer.Parse(TextBox1.Text))
            Me.RadGrid1.MasterTableView.VirtualItemCount = Me.MyDataLayer.Count
            Me.RadGrid1.MasterTableView.CurrentPageIndex = 0
            Me.RadGrid1.Rebind()
        End Sub
    End Class

    Public Class DataLayer
        Public Sub New(ByVal Session As HttpSessionState)
            Me.mySession = Session
        End Sub

        Private mySession As HttpSessionState

        Private ReadOnly Property Session() As HttpSessionState
            Get
                Return mySession
            End Get
        End Property


        Public Property Count() As Integer
            Get
                Dim MyRes As Object = Me.Session("_vc")
                If (Not MyRes Is Nothing) Then
                    Return CType(MyRes, Integer)
                End If
                Return 11
            End Get
            Set(ByVal Value As Integer)
                Me.Session("_vc") = Value
            End Set
        End Property

        Public Sub Initialize(ByVal Count As Integer)
            Me.Count = Count
            Me.ResetDeletedItems()
            Me.ResetDataSource()
        End Sub

        'Prepare a set of items only for the selected page
        Public ReadOnly Property GetDataSource(ByVal startIndex As Integer, ByVal PageSize As Integer) As DataTable
            Get
                'Is it cahced already?
                Dim dt As DataTable = CType(Me.Session("datasource"), DataTable)

                'no, then recreate
                If (dt Is Nothing) Then
                    dt = New DataTable
                    Dim dr As DataRow

                    dt.Columns.Add(New DataColumn("ID", GetType(Int32)))
                    dt.PrimaryKey = New DataColumn() {dt.Columns("ID")}

                    dt.Columns.Add(New DataColumn("Property1", GetType(String)))
                    dt.Columns.Add(New DataColumn("Property2", GetType(Double)))

                    Dim i As Integer = startIndex
                    Dim j As Integer = startIndex
                    While j < startIndex + PageSize
                        'Only VirtualCount number of Items
                        If j >= Me.Count Then
                            Exit While
                        End If

                        'preserve deleted items
                        If Not Me.DeletedItems(i) Is Nothing Then
                            GoTo Continue
                        End If

                        dr = dt.NewRow()
                        dr(0) = i
                        dr(1) = "Item " + (1 + i).ToString()
                        dr(2) = 1.23 * (100 - (i + 1))
                        dt.Rows.Add(dr)

                        j += 1
Continue:
                        i += 1
                    End While

                    Session("datasource") = dt
                End If

                Return dt
            End Get
        End Property

        Public Sub ResetDeletedItems()
            Me.Session("DeletedItems") = Nothing
        End Sub

        Public Sub ResetDataSource()
            Me.Session("datasource") = Nothing
        End Sub

        Public Sub DeleteItem(ByVal ID As Integer)
            Dim dt As DataTable = CType(Me.Session("datasource"), DataTable)
            If Not dt Is Nothing Then
                dt.Rows.Find(ID).Delete()
                dt.AcceptChanges()
            End If

            'set the item deleted
            Me.DeletedItems(ID) = True

            'Update count
            Me.Count = Me.Count - 1
        End Sub

        Public ReadOnly Property DeletedItems() As Hashtable
            Get
                Dim MyRes As Hashtable = CType(Me.Session("DeletedItems"), Hashtable)
                If (MyRes Is Nothing) Then
                    MyRes = New Hashtable
                    Me.Session("DeletedItems") = MyRes
                End If

                Return MyRes
            End Get
        End Property

    End Class

End Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -