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

本文关键字:表格 单元格 net 何使用 asp | 更新日期: 2023-09-27 18:17:57

我想在listview中使用td visibility属性隐藏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");
    }

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

您有几个问题。首先,当你试图在"MainContent"中找到"row1"时,它不会找到它,因为"row1"实际上是"MainContent"的其他子元素的子元素。它不会递归地找到它们,除非你告诉它们。

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

但是,因为你需要在每个ListViewItem上这样做,因为每个ListViewItem包含"row1",每一行将获得相同的属性(即全部可见或全部不可见)。这是如何做到的:

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");
        }
    }
}

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