在ListView中隐藏表行(ItemPlaceholderID行)

时间:2011-08-12 21:48:51

标签: asp.net vb.net

我有一个表行,它将我的分页控件保存在ListView中,如下所示(部分布局):

<asp:ListView ID="lvOrderItems" runat="server" 
    DataSourceID="odsShoppingCart"
    DataKeyNames="ProductNumber"
    ItemPlaceholderID="lvItemContainer">
    <LayoutTemplate>
        <table id="lvCart" runat="server">
            <tr id="lvHeader" runat="server">
            ...
            </tr>
            <tr id="lvItemContainer" runat="server"></tr>
            <tr id="lvPaging" runat="server">
            ...
            </tr>
        </table>
    </LayoutTemplate>

在我的代码隐藏中,我按如下方式处理DataBound事件,并且我计划有条件地隐藏整个lvItemContainer行(现在,我只是试图在没有条件的情况下隐藏行本身):< / p>

Protected Sub lvOrderItems_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles lvOrderItems.DataBound
    Dim lvItemContainer As HtmlTableRow = CType(lvOrderItems.FindControl("lvItemContainer"), HtmlTableRow)
    If Not lvItemContainer Is Nothing Then
        Response.Write("hit1")
        lvItemContainer.Visible = False
    End If

    Dim lvPaging As HtmlTableRow = CType(lvOrderItems.FindControl("lvPaging"), HtmlTableRow)
    If Not lvPaging Is Nothing Then
        Response.Write("hit2")
        lvPaging.Visible = False
    End If
End Sub

因此,如果此问题在DataBound上运行,则hit1永远不会被解雇,但{​​{1}}是......任何想法在这里发生了什么?

2 个答案:

答案 0 :(得分:3)

HTML纯粹主义者不喜欢它,但这种方法有效:

在OnLayoutCreated事件中,请尝试以下方法之一:

从表格和子行中取出 runat =“server”,然后执行以下操作:

<asp:Panel ID="pnlItemContainer" runat="server">
    <tr id="lvItemContainer"></tr>
</asp:Panel>

pnlItemContainer.Visible = false;

或者你可以这样做:

<tr id="lvItemContainer" runat="server"></tr>

编辑:嵌入式样式元素,因为设置可见为false在布局模板中不起作用。

lvItemContainer.Style["display"] = "none";

我不确定它如何与布局模板一起使用,但在其他情况下它对我有用。

答案 1 :(得分:0)

我没有尝试(失败地)调整ItemPlaceholderID容器的可见性,而是设置了容器中各行的可见性。