Imports System Imports System.Web Imports System.Web.UI Imports System.Collections Namespace myControls _ Public Class DataBoundState Inherits Control Private _dataSource As IEnumerable Private _itemTemplate As ITemplate Public Property DataSource As IEnumerable Get Return _dataSource End Get Set _dataSource = Value End Set End Property Protected Overrides Sub OnDataBinding( e As EventArgs ) Dim objDataEnum As IEnumerator Dim objItem As DataBoundStateItem Dim intCounter As Integer If Not DataSource Is Nothing Controls.Clear() ClearChildViewState() objDataEnum = DataSource.GetEnumerator() While ( objDataEnum.MoveNext() ) objItem = New DataBoundStateItem( 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 DataBoundStateItem objNumItems = ViewState( "NumItems" ) If Not objNumItems = Nothing Then Controls.Clear() intItemCount = CInt( objNumItems) For intCounter = 0 To intItemCount - 1 objItem = New DataBoundStateItem( Nothing ) ItemTemplate.InstantiateIn( objItem ) Controls.Add( objItem ) Next End If End Sub _ Public Property ItemTemplate As ITemplate Get Return _itemTemplate End Get Set _itemTemplate = value End Set End Property End Class Public Class DataBoundStateItem 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