如何使用c#在asp.net中查找表格单元格

时间:2014-08-14 17:32:09

标签: c# asp.net listview itemtemplate

我想使用td visibility属性在listview中隐藏itemtemplate的数据。点击一个按钮后,它应该再次显示itemtemplate中的数据。但是,我在后面的代码中找不到使用c#的td控件。有没有办法找到这种控制或其他方式来处理这个?

 <asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
  <asp:Button ID="Button1" runat="server" Text="Search" OnClick="ButtonClick" />
 <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">

     <asp:View ID="View1" runat="server">
        <asp:ListView ID="SectionListView" runat="server" InsertItemPosition="FirstItem" OnPagePropertiesChanged="SectionListView_PagePropertiesChanged">

             <ItemTemplate>
                 <tr style="">
                        <td></td>
                        <td id="row1" style="visibility:hidden;" runat="server">
                                <asp:Label ID="SectionItemLabel" runat="server" Text='<%# Eval("SectionItem") %>' />
                        </td>
                 </tr>
             </ItemTemplate>

以下是按钮点击代码的一部分:

protected void ButtonClick(object sender, EventArgs e)
    {
        var temp = (System.Web.UI.HtmlControls.HtmlTableCell)Page.Master.FindControl("MainContent").FindControl("row1");
    }

1 个答案:

答案 0 :(得分:1)

你有几个问题。首先,当你试图在“MainContent”中找到“row1”时,如果找不到它,因为“row1”实际上是“MainContent”的其他子节点的子节点。除非you tell them to,否则它不会递归地找到它们。

其次,由于ListView中的每个ListViewItem都包含“row1”,因此每个SectionListView_ctrl0_row1都有自己的唯一ID,例如SectionListView_ctrl1_row1ListViewItem等。因此,你需要在每个ListViewItem上使用FindControl()。

但是,因为您需要在每个ListViewItem上执行此操作,并且因为每个protected void ButtonClick(object sender, EventArgs e) { foreach (ListViewItem lvi in SectionListView.Items) { if (lvi.ItemType == ListViewItemType.DataItem) { HtmlTableCell row1 = (HtmlTableCell)lvi.FindControl("row1"); row1.Style.Add("visibility", "hidden"); } } } 包含“row1”,所以每行将获得相同的属性(即所有可见或全部不可见)。以下是如何做到的:

{{1}}

如果您需要单独设置每个单元格的样式,则每个单元格都需要以不同方式命名。如果是这种情况,通常会在ID的末尾附加某种数字或数据库ID。