webForumDet fria alternativet

Lägga till en Event för en klass.

.NET

0 svar · 303 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
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.

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)