【问题标题】:Hide a table column in a nested ListView在嵌套的 ListView 中隐藏表格列
【发布时间】:2010-09-28 05:58:15
【问题描述】:

我在另一个 ListView 中有一个 ListView,每当传递特定参数时,我想在内部 ListView 中隐藏一个表格列。鉴于下面的设置,如果 URL 包含“...?id=no”,我将如何隐藏 ID 列(标题和数据)?

<asp:ListView ID="ProcedureListView" runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
    </LayoutTemplate>
    <ItemTemplate>
        <h4>
            <%#Eval("PROCEDURE_CODE") %>
        </h4>
        <asp:ListView ID="BenefitListView" runat="server" DataSource='<%#Eval("benefits") %>'>
            <LayoutTemplate>
                <table cellpadding="5" class="indent">
                    <tr class="tableHeader">
                        <td>
                            ID
                        </td>
                        <td>
                            Benefit
                        </td>
                    </tr>
                    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <%#Eval("benefit_id")%>
                    </td>
                    <td>
                        <%#Eval("benefit_name")%>
                    </td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
    </ItemTemplate>
</asp:ListView>

【问题讨论】:

    标签: asp.net html listview


    【解决方案1】:

    如果您尝试从后面的代码中执行此操作,那么您可以这样做:

    在外部 ListView 的 onBind 事件中,您会找到内部 listview 控件,然后找到所需的标签并将可见属性更改为 false。我在你的另一个问题上回答了这个问题。

    祝你好运!

    【讨论】:

      【解决方案2】:

      在 HTML 标签中添加一个 css 类,然后从后面的代码中将 css 类注入到页面中

      <td id='' class='hideMe'> 
          ID
      </td>
      

      代码在预渲染事件中

      if(id==123){
         // please refer to help file for exact syntax
         // but essentially you will be injecting
         // <style type='text/css'>
         // .hideMe{display:none;}
         // </style>
      }
      

      或者,您可以在样式表中包含上述 css 类,并仅根据 ID 将其添加到您想要隐藏的标签中

      【讨论】:

        【解决方案3】:

        您可以执行以下操作:

        <% if (Request.QueryString["id"] != "no") { %>
           <td>
             <%#Eval("benefit_id")%>
           </td>
        <% } %>
           <td>
             <%#Eval("benefit_name")%>
           </td>
        

        对标题做同样的事情。

        编辑:您不清楚,但从先前的评论来看,如果您想在后面的代码中执行此操作,那么您应该将 id 标头和 id 数据放在标签服务器控件中。然后你可以检查后面代码中的查询字符串,并且在数据绑定时你可以将 visible 属性设置为 false。

        这里有几个选项,这真的取决于你最喜欢什么。

        【讨论】:

        • 不幸的是,当您尝试在标头中执行此操作时,会产生以下错误:无法修改 Controls 集合,因为该控件包含代码块(即 )。跨度>
        • 编辑回复:问题是这是一个嵌套的ListView,所以我无法从后面的代码访问它里面的任何东西。如果这只是一个简单的 ListView,会有很多方法可以做到,但它们似乎都落在嵌套的 ListView 中。
        • 你的意思是设计师抛出了一个错误对吧?所以这只意味着您必须在 html 视图中编辑代码。它应该可以正常运行,虽然我还没有尝试过。
        • 您可能想指出到目前为止您已经尝试过的内容,因此答案不是多余的。
        【解决方案4】:

        您可以将它们包装在占位符中,然后动态设置占位符的可见性以删除列...(您将需要两个占位符)

        【讨论】:

        • 动态部分有问题。如果我将它包装在一个名为“myPH”的占位符中,然后执行 ProcedureListView.FindControl(“myPH”),它不会返回任何内容。
        • 你能把你的代码贴在后面吗?您如何对嵌套的 ListView 进行数据绑定?
        • 我的错 - 相反,我应该逐步浏览项目集合,因为每个内部控件都存在于每一行(项目)上。
        猜你喜欢
        • 1970-01-01
        • 2016-11-29
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-26
        相关资源
        最近更新 更多