7
votes

Accès aux données des parents dans un répéteur imbriqué fortement typé

permet de dire que j'ai une structure de classe qui ressemble à quelque chose comme ceci:

<asp:Repeater ItemType="A" runat="server">
    <ItemTemplate>
        <asp:Label Text="<%# Item.Property1 %>" runat="server" />
        <asp:Repeater runat="server" DataSource="<%# Item.Property3 %>" ItemType="B">
            <ItemTemplate>
                <asp:Label Text="<%# Item.Property4 %>" runat="server" />
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>


2 commentaires

Voulez-vous dire datasource = "<% # item.property3%>" au lieu de Datasource = "<% # item.property2%>"


Oui je l'ai fait. Merci d'avoir attrapé ça.


4 Réponses :


9
votes

Eh bien, de Accéder aux données des parents dans le répéteur imbriqué, dans La tête de tête , j'ai trouvé la solution suivante. Ce n'est pas le plus joli, mais ça marche: xxx


1 commentaires

J'espérais une solution impliquant des biens magiques contenant le parent fortement dactylographié ... mais je n'ai pas pu trouver un ...



3
votes

Vous pouvez utiliser un tuple générique comme type pour le répéteur intérieur et transmettre l'élément du répéteur externe:

<asp:Repeater runat="server" ID="RptWeekNumbers" ItemType="System.Int32">
    <ItemTemplate>
        <asp:Repeater runat="server" 
            DataSource="<%# Enumerable.Range(1, 5).Select(day => new Tuple<int,int>(Item, day))%>" 
            ItemType="System.Tuple<int,int>">
            <ItemTemplate>
                WeekNumber: <%# Item.Item1 %>, 
                DayNumber: <%# Item.Item2 %>
                <br />
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>


0 commentaires

1
votes

Lors du réglage de la source de données pour le répéteur intérieur:

DataSource='<%# Eval("Property3") %>'


0 commentaires

0
votes

Vous pouvez affecter l'élément du répéteur parent à une variable distincte.

<script runat="server">
    A parentItem;
</script>
<asp:Repeater ItemType="A" runat="server">
    <ItemTemplate>
        <%# parentItem = Item %>
        <asp:Label Text="<%# Item.Property1 %>" runat="server" />
        <asp:Repeater runat="server" DataSource="<%# Item.Property3 %>" ItemType="B">
            <ItemTemplate>
                <asp:Label Text="<%# parentItem.Property4 %>" runat="server" />
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>


0 commentaires