Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

Accesso ad una proprietà di un dataitem parent all'interno di controlli databound annidati

Mettiamo di avere due controlli databound annidati come in questo esempio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<asp:Repeater Id="rptOuter" runat="server">
  <ItemTemplate>
      <asp:Repeater Id="rptInner" runat="server">
        <ItemTemplate>
          <tr>
            <td><%# Container.DataItem %></td>
          </tr>
        </ItemTemplate>
      </asp:Repeater>
  </ItemTemplate>
</asp:Repeater>

E una lista costruita in questo modo:

1
2
3
4
5
6
7
public class TestOuter
{
    public String Prefix { get; set; };
    List<String> TestInner { get; set; };
}

List<TestOuter> listDataSource = CostruisciListaTestOuter()

Se vogliamo visualizzare gerarchicamente il contenuto della lista listDataSource nel Repeater esterno rptOuter, e per ogni suo elemento la lista TestInner nel repeater rptInner, possiamo fare qualcosa del genere:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<asp:Repeater Id="rptOuter" DataSource="<%#listDataSource%>" runat="server">
  <ItemTemplate>
      <asp:Repeater Id="rptInner" 
          DataSource="<%#((TestOuter)Container.DataItem).TestInner%>" runat="server">
        <ItemTemplate>
          <tr>
            <td><%# Container.DataItem %></td>
          </tr>
        </ItemTemplate>
      </asp:Repeater>
  </ItemTemplate>
</asp:Repeater>

Ora se dall'interno di una riga del Repeater interno (rptInner), vogliamo visualizzare una proprietà del DataItem associato alla riga del Repeater esterno (rptOuter), ad esempio la proprietà Prefix, possiamo fare:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<asp:Repeater Id="rptOuter" DataSource="<%#listDataSource%>" runat="server">
  <ItemTemplate>
      <asp:Repeater Id="rptInner" 
          DataSource="<%#((TestOuter)Container.DataItem).TestInner%>" runat="server">
        <ItemTemplate>
          <tr>
            <td>
             <%# 
              ((TestOuter)((RepeaterItem)Container.Parent.Parent).DataItem).Prefix 
             %>_<%# 
              Container.DataItem 
             %>
            </td>
          </tr>
        </ItemTemplate>
      </asp:Repeater>
  </ItemTemplate>
</asp:Repeater>

Comments