Toon posts:

[ASP.NET] Controls met een Repeater

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een collection gemaakt waarin ik controls kan opslaan, werkt zo:

Visual Basic .NET:
1
2
3
4
5
6
7
Dim Items As New Menu.MenuItems
Items.Categorties.Add("category 1")

Dim l As New Label 'kan elk control zijn
l.Text = "een item"

Items.Categories(0).Items.Add(l) '0 is de index


Nu wil ik dit object in een repeater zetten en de controls die erin zitten op de pagina zetten. zoiets als dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<asp:Repeater Runat="server" ID="MenuRepeater">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem, "Text") %>
        <asp:Repeater Runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "Items") %>'>
            <ItemTemplate>
                <%# Container.DataItem %>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:Repeater>

Maar dat werkt natuurlijk niet dan krijg ik gewoon System.Web.UI.WebControls.Label op me pagina :P

Ik heb het wel voor elkaar gekregen met een placeholder en het DataBound event van de repeater maar dat lijkt me niet echt een goede manier...

Dus.. weet iemand hoe je dit het best kan oplossen? :)

[ Voor 12% gewijzigd door Verwijderd op 08-11-2005 12:46 ]


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Een placeholder en het DataBound event is wat mij betreft zeker de manier!
Flexibel en niet onbelangrijk: het werkt!

Verwijderd

Topicstarter
Ja het werkt wel maar het wordt dan helaas niet opgeslagen in de viewstate ik heb nu het volgende bedacht:

Ik maak een class met de control erin en een functie om hem te renderen:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Public Class ControlItem

    Private _Control As Control

    Public Sub New(ByVal Control As Control)
        Me.Control = Control
    End Sub

    Public Function Render() As String
        Dim sb As New StringBuilder
        Dim tw As New StringWriter(sb)
        Dim hw As New HtmlTextWriter(tw)

        Control.RenderControl(hw)

        Return sb.ToString
    End Function

    Public Property Control() As Control
        Get
            Return _Control
        End Get
        Set(ByVal Value As Control)
            _Control = Value
        End Set
    End Property

End Class


Dat sla ik vervolgens op in me collection en dan kan ik me collection op deze manier gebruiken ik een repeater:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<asp:Repeater Runat="server" ID="MenuRepeater">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
        <h1><%# DataBinder.Eval(Container.DataItem, "Text") %></h1>
        <p>
            <asp:Repeater Runat="server" DataSource='<%# Container.DataItem.Items %>'>
                <ItemTemplate>
                    <%# Container.DataItem.Render %><br />
                </ItemTemplate>
            </asp:Repeater>
        <p>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:Repeater>


Nog niet helemaal zoals ik zou willen eigelijk maar voorlopig ff goed genoeg :)