1

我有以下示例代码,它使用嵌套的 ListView:

<asp:ListView ID="list" runat="server" ItemPlaceholderID="placeHolder"
        OnItemDataBound="listItemDataBound">
    <ItemTemplate>
        <p><%#Eval("name") %></p>
        <asp:ListView ID="sublist" runat="server" ItemPlaceholderID="subPlaceHolder">
            <ItemTemplate><%#Eval("subName") %></ItemTemplate>
            <LayoutTemplate>
                <asp:PlaceHolder ID="subPlaceHolder" runat="server"></asp:PlaceHolder>
            </LayoutTemplate>
        </asp:ListView>
    </ItemTemplate>
    <LayoutTemplate>
        <asp:PlaceHolder ID="placeHolder" runat="server"></asp:PlaceHolder>
    </LayoutTemplate>
</asp:ListView>

但是嵌套的 ListView(子列表)在我的脚本代码中未被识别为变量,因此我无法访问它并提供一些数据绑定。当我在主 ListView(例如 DataSource)中添加一些其他对象时,它也无法识别。如何访问嵌套的 ListView?

感谢您的任何建议。

4

2 回答 2

2

中的控件ItemTemplate将被创建多次,为数据源中的每个项目创建一次,因此编译器无法生成单个字段来表示它们。您需要FindControl改用:

protected void listItemDataBound(object sender, ListViewItemEventArgs e)
{
   var sublist = (ListView)e.Item.FindControl("sublist");
   ...
}
于 2012-10-29T12:54:26.503 回答
0

在您的OnItemDataBound事件代码中,您必须这样做:

 if (e.Item.ItemType == ListViewItemType.DataItem)
 {
    ListView sublist = (ListView)e.Item.FindControl("sublist");
 }

为了找到你嵌套的 ListView

于 2012-10-29T12:54:32.653 回答