我想使用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");
}
答案 0 :(得分:1)
你有几个问题。首先,当你试图在“MainContent”中找到“row1”时,如果找不到它,因为“row1”实际上是“MainContent”的其他子节点的子节点。除非you tell them to,否则它不会递归地找到它们。
其次,由于ListView中的每个ListViewItem
都包含“row1”,因此每个SectionListView_ctrl0_row1
都有自己的唯一ID,例如SectionListView_ctrl1_row1
,ListViewItem
等。因此,你需要在每个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。