2010-12-13 4 views
3

У меня есть трижды вложенные элементы управления ListView на моей странице asp.net, каждая из которых вложена в другую. Я использую событие OnItemDataBound в первом ListView, чтобы установить DataSource 2-го уровня ListView. Третий ListView содержится во втором ListView. Я хочу назначить один и тот же DataSource как для элементов управления источником данных ListView 2-го, так и для третьего уровня, но я не могу понять, как получить доступ к ListView 3-го уровня, чтобы сделать это.Связать источник данных вложенного ListView с источником данных ListView родителя

Вот некоторые примеры кода, чтобы помочь себе:

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

Метод level1_ItemDataBound находит контроль level2, отбрасывает его как ListView, устанавливает свой DataSource и выполняет DataBind. На этом этапе я застрял, пытаясь установить Level3.DataSource на то же, что и Level2.DataSource. Любая помощь?

ответ

2

Прежде чем вы вызовете DataBind на странице list2 уровня2, вы должны зарегистрировать обработчик событий в событии ItemDataBound уровня2.

Некоторые псевдо-код:

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(); 
} 
Смежные вопросы