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データ ソース内の項目ごとに 1 回、複数回作成されるため、コンパイラはそれらを表す単一のフィールドを生成できません。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 に答える