我有以下示例代码,它使用嵌套的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?
感谢您的任何建议。
答案 0 :(得分:2)
ItemTemplate
中的控件将多次创建,一次针对数据源中的每个项目,因此编译器无法生成单个字段来表示它们。您需要使用FindControl
代替:
protected void listItemDataBound(object sender, ListViewItemEventArgs e)
{
var sublist = (ListView)e.Item.FindControl("sublist");
...
}
答案 1 :(得分:0)
在OnItemDataBound
事件代码中,您必须执行此操作:
if (e.Item.ItemType == ListViewItemType.DataItem)
{
ListView sublist = (ListView)e.Item.FindControl("sublist");
}
为了找到嵌套的ListView