Frågan#1
Har en klass som denna:
Namespace Menu
<ToolboxData("<{0}:RecursiveMenu runat=server></{0}:RecursiveMenu>")> _
Public Class RecursiveMenu
Inherits HierarchicalDataBoundControl
' Template Declarations
Private _HeaderTemplate As ITemplate
Private _FooterTemplate As ITemplate
Private _ItemTemplate As ITemplate
Private _ItemHeaderTemplate As ITemplate
Private _ItemFooterTemplate As ITemplate
<PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(GetType(DataItem))> _
Public Property HeaderTemplate() As ITemplate
Get
Return _HeaderTemplate
End Get
Set(ByVal value As ITemplate)
_HeaderTemplate = value
End Set
End Property
<PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(GetType(DataItem))> _
Public Property FooterTemplate() As ITemplate
Get
Return _FooterTemplate
End Get
Set(ByVal value As ITemplate)
_FooterTemplate = value
End Set
End Property
<PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(GetType(DataItem))> _
Public Property ItemTemplate() As ITemplate
Get
Return _ItemTemplate
End Get
Set(ByVal value As ITemplate)
_ItemTemplate = value
End Set
End Property
<PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(GetType(DataItem))> _
Public Property ItemHeaderTemplate() As ITemplate
Get
Return _ItemHeaderTemplate
End Get
Set(ByVal value As ITemplate)
_ItemHeaderTemplate = value
End Set
End Property
<PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(GetType(DataItem))> _
Public Property ItemFooterTemplate() As ITemplate
Get
Return _ItemFooterTemplate
End Get
Set(ByVal value As ITemplate)
_ItemFooterTemplate = value
End Set
End Property
#Region "Datafields"
Public Property TextField() As String
Get
Dim o As Object = ViewState("TextField")
If o Is Nothing Then
Return String.Empty
Else
Return CType(o, String)
End If
End Get
Set(ByVal value As String)
ViewState("TextField") = value
End Set
End Property
Public Property NavigateUrl() As String
Get
Dim o As Object = ViewState("NavigateUrl")
If o Is Nothing Then
Return String.Empty
Else
Return CType(o, String)
End If
End Get
Set(ByVal value As String)
ViewState("NavigateUrl") = value
End Set
End Property
#End Region
Protected Overrides Sub CreateChildControls()
RecursiveCreateChildControls(GetData("").Select())
End Sub
Private Sub RecursiveCreateChildControls(ByVal dataItems As IHierarchicalEnumerable)
Dim firstItem As Boolean = True
For Each e As Object In dataItems
' Render the header only if we have child items
If firstItem Then
Dim header As New DataItem(String.Empty, String.Empty)
HeaderTemplate.InstantiateIn(header)
Controls.Add(header)
firstItem = False
End If
Dim data As IHierarchyData = dataItems.GetHierarchyData(e)
' Find the data value based on the TextField
Dim text As String = String.Empty
Dim navigateUrl As String = String.Empty
text = DataBinder.GetPropertyValue(data, Me.TextField)
navigateUrl = DataBinder.GetPropertyValue(data, Me.NavigateUrl)
' Create an item header
Dim itemHeader As New DataItem(String.Empty, String.Empty)
ItemHeaderTemplate.InstantiateIn(itemHeader)
Controls.Add(itemHeader)
itemHeader.DataBind()
' Create the data item
Dim item As New DataItem(text, navigateUrl)
ItemTemplate.InstantiateIn(item)
Controls.Add(item)
item.DataBind()
' Create any child items
RecursiveCreateChildControls(data.GetChildren())
' Create the item footer
Dim itemFooter As New DataItem(String.Empty, String.Empty)
ItemFooterTemplate.InstantiateIn(itemFooter)
Controls.Add(itemFooter)
itemFooter.DataBind()
Next
' If we had a header, then render out the footer
If firstItem = False Then
Dim footer As New DataItem(String.Empty, String.Empty)
FooterTemplate.InstantiateIn(footer)
Controls.Add(footer)
End If
End Sub
End Class
Som i stort tillsammans med en DataItem-klass gör en menu med ul-taggar.
Nu skulle jag vilja lägga till en ItemDataBound event till den. Hur går man tillväga för att man skall få en Event att Raise vid DataBind av de DataItem som denna klass behandlar?
Tacksam för svar.
