2010-12-13 19 views
3

私は別のネストされたasp.netページにトリプルネストListViewコントロールを持っています。 1番目のListViewでOnItemDataBoundイベントを使用して、2番目のレベルのListViewのDataSourceを設定します。 3番目のListViewは、2番目のListViewの中に含まれています。 2番目と3番目の両方のListViewデータソースコントロールに同じDataSourceを割り当てたいのですが、3番目のListViewにアクセスする方法を理解できません。ここでネストされた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コントロールを見つけ、リストビューとして、それをキャストし、そのデータソースを設定し、DataBindをを実行します。この時点で、Level3.DataSourceをLevel2.DataSourceと同じに設定しようとしています。どんな助け?

答えて

2

level2のlistviewでDataBindを呼び出す前に、level2のItemDataBoundイベントにイベントハンドラを登録する必要があります。

いくつかの擬似コード:

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(); 
} 
関連する問題