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

📄 databounddataset.vb

📁 asp.net技术内幕的书配源码
💻 VB
字号:
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Collections
Imports System.Data

Namespace myControls

<ParseChildren(true)> _
Public Class DataBoundDataSet
Inherits Control

  Private _dataSource As Object
  Private _dataMember As String = String.Empty 
  Private _itemTemplate As ITemplate

  Public Property DataSource As Object
    Get
      Return _dataSource
    End Get
    Set
      _dataSource = Value
    End Set
  End Property

  Public Property DataMember As String
    Get
      Return _dataMember
    End Get
    Set
      _dataMember = Value
    End Set
  End Property

  Private Function GetDataSource( DataSource, DataMember ) As IEnumerable
    If TypeOf DataSource Is IEnumerable Then
      Return DataSource
    Else If TypeOf DataSource Is DataSet Then
      If DataMember <> String.Empty Then
        Return DataSource.Tables( DataMember ).DefaultView
      Else
        Return DataSource.Tables( 0 ).DefaultView
      End If
    Else
      Throw New ArgumentException( "Invalid data source!" )
    End If
  End Function

  Protected Overrides Sub OnDataBinding( e As EventArgs )
    Dim objDataEnum As IEnumerator
    Dim objItem As DataBoundDataSetItem
    Dim intCounter As Integer

    If Not DataSource Is Nothing
      Controls.Clear()
      ClearChildViewState()

      objDataEnum = GetDataSource( _dataSource, _dataMember ).GetEnumerator()

      While ( objDataEnum.MoveNext() )
        objItem = New DataBoundDataSetItem( objDataEnum.Current )
        ItemTemplate.InstantiateIn( objItem )
        Controls.Add( objItem )
        intCounter += 1
      End While
      ViewState( "NumItems" ) = intCounter
      ChildControlsCreated = True
    End If
  End Sub


  Protected Overrides Sub CreateChildControls()
    Dim objNumItems As Object
    Dim intItemCount As Integer
    Dim intCounter As Integer
    Dim objItem As DataBoundDataSetItem

    objNumItems = ViewState( "NumItems" )
    If Not objNumItems = Nothing Then
      Controls.Clear()
      intItemCount = CInt( objNumItems)
      For intCounter = 0 To intItemCount - 1
        objItem  = New DataBoundDataSetItem( Nothing )
        ItemTemplate.InstantiateIn( objItem )
        Controls.Add( objItem )
      Next
    End If
  End Sub

  <TemplateContainer(GetType(DataBoundDataSetItem))> _
  Public Property ItemTemplate As ITemplate
    Get
      Return _itemTemplate
    End Get
    Set
      _itemTemplate = value
    End Set
  End Property
End Class


Public Class DataBoundDataSetItem
Inherits Control
Implements INamingContainer

  Private _DataItem As Object

  Public Sub New( DataItem As Object )
    MyBase.New()
    _DataItem = DataItem
  End Sub

  Public ReadOnly Property DataItem As Object
  Get
    Return _DataItem
  End Get
  End Property

End Class

End Namespace

⌨️ 快捷键说明

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