2013-05-02 9 views
7

Powiedzmy mam struktury klasy, który wygląda mniej więcej tak:dane Dostęp dominujących w zagnieżdżonych silnie wpisany repeater

public class A 
{ 
    public string Poperty1 { get; set; } 
    public string Poperty2 { get; set; } 
    public List<B> Property3 { get; set; } 
} 

public class B 
{ 
    public string Property4 { get; set; } 
    public string Property5 { get; set; } 
} 

... i kilka zagnieżdżonych przemienników, które wyglądają tak:

<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> 

Jak uzyskać dostęp do Property2 z drugiego przemiennika?

+1

Masz na myśli DataSource = "<% # Item.Property3%>" zamiast DataSource = "<% # Item.Property2%>" –

+0

Tak, zrobiłem. Dzięki za złapanie tego. –

Odpowiedz

8

Cóż, od Accessing parent data in nested repeater, in the HeaderTemplate, znalazłem następujące rozwiązanie. To nie jest najładniejszy, ale to działa:

<%# ((Container.Parent.Parent as RepeaterItem).DataItem as A).Property2 %> 
+0

Miałem nadzieję na rozwiązanie, które obejmowałoby jakąś magiczną właściwość zawierającą silnie typowany rodzic ... ale nie byłem w stanie znaleźć jednego ... –

3

Można użyć rodzajowe krotka jako typ na wewnętrznej repeatera i przejść na pozycję z zewnętrznym urządzeniem peryferyjnym:

<asp:Repeater ItemType="A" runat="server" ID="Rpt"> 
    <ItemTemplate> 
     <asp:Label Text="<%# Item.Property1 %>" runat="server" /> 
     <asp:Repeater runat="server" 
      DataSource="<%# Item.Property3.Select(innerItem => new Tuple<A,B>(Item, innerItem)) %>" 
      ItemType="System.Tuple<A,B>"> 
      <ItemTemplate> 
       <asp:Label Text="<%# Item.Item2.Property4 %>" runat="server" /> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ItemTemplate> 
</asp:Repeater> 

Należy pamiętać, że ReSharper będzie protestować przeciwko użyciu generycznych w ItemType!

Oto inny przykład, bliżej czegoś byłem w pracy:

<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> 
1

Podczas ustawiania DataSource dla wewnętrznej powielacz:

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

Uwaga pojedynczy cudzysłów przy ustalaniu wartości.

Powiązane problemy