如何访问第三个嵌套的ListView属性

时间:2014-04-01 22:38:07

标签: c# asp.net

早上好

我想知道在这种情况下如何获取ListView控件:

<asp:ListView ID="lv1" runat="server" OnItemDataBound="lv1_ItemDataBound">
     <asp:ListView ID="lv2" runat="server">
           <asp:ListView ID="lv3" runat="server">

           </asp:ListView>
     </asp:ListView>
</asp:ListView>
Codebehind中的

protected void lv1_ItemDataBound(object sender, ListViewItemEventArgs e) {
    ListView lv2 = (ListView)e.Item.FindControl("lv2");  // Accessed
    ListView lv3 = (ListView)e.Item.FindControl("lv3");  // Not Accessed (NULL)
}

我试图从父ListView访问嵌套的最后一个。请任何建议。 ??

3 个答案:

答案 0 :(得分:1)

此外,我不相信你可以像这样嵌套ListView's

更像是这样:

<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        <asp:ListView ID="ListView2" runat="server">
            <ItemTemplate>
                <asp:ListView ID="ListView3" runat="server"></asp:ListView>
        </ItemTemplate>
        </asp:ListView>
    </ItemTemplate>
</asp:ListView>

但是,你可以按照Josh W的说法做,并使用一系列.FindControl()来电

答案 1 :(得分:0)

这是一个猜测...因为我没有使用asp的经验,但你的控制应该可以从你的铸造lv2访问,因为lv3是&#34;内部&#34;它。我假设搜索只对ListViewItemEventArgs

进行顶级检查
protected void lv1_ItemDataBound(object sender, ListViewItemEventArgs e) {
    ListView lv2 = (ListView)e.Item.FindControl("lv2");  // Accessed
    ListView lv3 = (ListView)lv2.Item.FindControl("lv3");  // try it?
}

修改

MSDN http://msdn.microsoft.com/en-us/library/486wc64h%28v=vs.110%29.aspx

  

使用FindControl从代码隐藏中的函数访问控件   页面,访问位于另一个容器内的控件或在   目标控制不直接的其他情况   呼叫者可以访问。 此方法仅在找到控件时才会出现   控件直接由指定的容器包含;那就是   方法不会在整个控件层次结构中搜索   控制。有关如何在不执行控件时查找控件的信息   知道它的直接容器,请参见如何:访问服务器控件   ID。

答案 2 :(得分:0)

尝试使用lv2的ItemDataBound事件来获取lv3

protected void lv2_ItemDataBound(object sender, ListViewItemEventArgs e) {
    ListView lv3 = (ListView)e.Item.FindControl("lv3");
}