将嵌套ListView的数据源绑定到父ListView的数据源。

3
我在我的asp.net页面上有三个嵌套的ListView控件,每个都嵌套在另一个控件中。我使用第一个ListView中的OnItemDataBound事件来设置第二级ListView的数据源。第三个ListView包含在第二个ListView的<ItemTemplate>中。我想将相同的数据源分配给第二和第三级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,设置其数据源并执行DataBind。此时我卡在了尝试让Level3.DataSource与Level2.DataSource相同的地方。有什么帮助吗?

1个回答

2
在调用level2列表视图上的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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接