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>
4 Réponses :
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:
J'espérais une solution impliquant des biens magiques contenant le parent fortement dactylographié ... mais je n'ai pas pu trouver un ...
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>
Lors du réglage de la source de données pour le répéteur intérieur:
DataSource='<%# Eval("Property3") %>'
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>
Voulez-vous dire datasource = "<% # item.property3%>" au lieu de Datasource = "<% # item.property2%>"
Oui je l'ai fait. Merci d'avoir attrapé ça.