webForumDet fria alternativet

skapa repeater

.NET

1 svar · 173 visningar · startad av henrikjohansson

Medlem sedan maj 2000360 inlägg
Frågan#1

Hur skapar man en repeater med kod?
Jag vill nämnligen ha samma struktur på många repeaters och därför är det smidigast om man skulle kunna skapa dom med kod..
eller om man kanske kan inkludera dom på nått smidigt sätt.

Medlem sedan mars 20002 836 inlägg
#2

det jag kan komma på är att göra en UserControl (el. ServerControl) som man laddar in på sidorna:

rpt_tpl.ascx
========
<%@ Control Language="VB" ClassName="TempRepeater" Debug="True" %>
<script runat="server">
    Private _dataSource As Object
    Private _header As String
    
    Public Property Header() As String
        Get
            Return _header
        End Get
        Set(ByVal Value As String)
            _header = Value
        End Set
    End Property
    
    Public Property DataSource() As Object
        Get
            Return _dataSource
        End Get
        Set(ByVal Value As Object)
            _dataSource = Value
        End Set
    End Property
    
    Private Sub Page_Load(sender As Object, e As EventArgs)
        If (Not Page.IsPostBack) Then
            tplRpt.DataSource = DataSource
            tplRpt.DataBind()
        End If
    End Sub
</script>
<asp:Repeater id="tplRpt" runat="server">
    <HeaderTemplate>
        <%# Header%>
    </HeaderTemplate>
    <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem, "Name") %><br>
    </ItemTemplate>
    <FooterTemplate>
    
    </FooterTemplate>
</asp:Repeater>

och sedan på sidan du vill visa (har en testklass)

<%@ Page Language="VB" %>
<%@ Register TagPrefix="my" TagName="ctrl" src="rpt_tpl.ascx" %>
<script runat="server">
    Private Sub Page_Load(sender As Object, e As EventArgs)
        Dim _list As New ArrayList()
        
        Dim _test As Test
        _test = New Test()
        _test.Name = "Patrik"
        
        _list.Add(_test)
        
        _test = New Test()
        _test.Name = "Admin"
        
        _list.Add(_test)
        
        myCtrl.Header = "<H3>My Buddies!</H3>"
        myCtrl.DataSource = _list
    End Sub
    
    Public Class Test
        
        Private _name As String
        Private _email As String
        
        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal Value As String)
                _name = Value
            End Set
        End Property
        
    End Class
</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <my:ctrl id="myCtrl" runat="server" ></my:ctrl>
    </form>
</body>
</html>

Det enda som måste "stämma" är att datasourcen's DataContainers måste ha samma namn:

<%# DataBinder.Eval(Container.DataItem, [b]"Name"[/b]) %>

om nu detta är det bästa ska jag låte vara osagt .... men, det funkar :e

cya,
PatrikB

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