2010-12-13 8 views
3

Ich habe dreischichtige ListView-Steuerelemente auf meiner asp.net-Seite, die jeweils ineinander verschachtelt sind. Ich verwende das OnItemDataBound-Ereignis in der 1. ListView, um die DataSource der ListView der zweiten Ebene festzulegen. Das 3. ListView ist im 2. ListView enthalten. Ich möchte die gleiche DataSource den ListView-Datenquellensteuerelementen der zweiten und dritten Ebene zuweisen, aber ich kann nicht herausfinden, wie auf die ListView der dritten Ebene zugegriffen wird, um dies zu tun.Binden Sie die Datenquelle einer verschachtelten ListView an die ListView-Datenquelle des übergeordneten Elements

Hier ist ein Beispielcode visualisieren zu helfen:

<asp:ListView id="level1" runat="server" OnItemDataBound="level1_ItemDataBound"> 
    <layouttemplate> 
    <asp:PlaceHolder runat="server" ID="itemPlaceHolder"></asp:PlaceHolder> 
    </layouttemplate> 
    <itemtemplate> 
    <asp:ListView id="level2" runat="server"> 
     <layouttemplate> 
     <asp:ListView id="level3" runat="server"> 
      <layouttemplate> 
      <asp:PlaceHolder runat="server" ID="itemPlaceHolder"></asp:PlaceHolder> 
      </layouttemplate> 
      <itemtemplate>OUTPUT DATA FOR LEVEL 3</itemtemplate> 
     </asp:ListView> 
     </layouttemplate> 
     <itemtemplate>OUTPUT DATA FOR LEVEL 2</itemtemplate> 
    </asp:ListView> 
    OUTPUT DATA FOR LEVEL 1 
    </itemtemplate> 
</asp:ListView> 

Die als Listview level1_ItemDataBound Methode findet die Level2 Kontrolle, wirft es setzt seine Datasource und führt die DataBind. An dieser Stelle bleibe ich stecken und versuche Level3.DataSource auf Level2.DataSource zu setzen. Irgendeine Hilfe?

Antwort

2

Bevor Sie DataBind in der Listenansicht von level2 aufrufen, sollten Sie einen Event-Handler für das ItemDataBound-Ereignis von level2 registrieren.

Einige Pseudo-Code:

protected void level1_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    var listView2 = (ListView) e.Item.FindControl("level2"); 
    listView2.ItemDataBound += level2_ItemDataBound; 
    listView2.DataSource = myDataSource; 
    listView2.DataBind(); 
} 

protected void level2_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    var listView3 = (ListView) e.Item.FindControl("level3"); 
    listView3.DataSource = myDataSource; 
    listView3.DataBind(); 
} 
Verwandte Themen