面临相当严重的问题。
我使用ListView:
<asp:ListView ID="ListView1" runat="server" GroupPlaceholderID="groupPlaceHolder"
ItemPlaceholderID="itemPlaceHolder">
<LayoutTemplate>
<table border="1">
<tr>
<th rowspan="3">Текст1</th>
<th rowspan="3">Текст2</th>
<th id="th_id1" runat="server" colspan="3">Текст4</th>
...
</tr>
...
<asp:PlaceHolder runat="server" ID="groupPlaceHolder"></asp:PlaceHolder>
...
</table>
</LayoutTemplate>
<GroupTemplate>
<tr>
<asp:PlaceHolder runat="server" ID="itemPlaceHolder"></asp:PlaceHolder>
</tr>
</GroupTemplate>
<ItemTemplate>
<td style="padding:10px">
<asp:Label ID="lblID" runat="server" CssClass="padding-table" Text='<%# Eval("ID") %>'></asp:Label>
</td>
<td style="padding:10px">
<asp:Label ID="lblName" runat="server" CssClass="padding-table" Text='<%# Eval("Name") %>'></asp:Label>
</td>
<td id="th_id9" runat="server" style="padding:10px">
<asp:Label ID="lblValue" runat="server" CssClass="padding-table" Text='<%# Eval("Value") %>'></asp:Label>
</td>
...
</ItemTemplate>
</asp:ListView>
您需要更改属性th_id1和th_id9.
很容易访问th_id1:
var table = (HtmlTableCell)ListView1.FindControl("th_id1") as System.Web.UI.HtmlControls.HtmlTableCell;
但它th_id9无法改变,因为它不仅不是表的一部分,而且还是可扩展的(负责表的内容)。
显然,th_id9在大表中重复的内容,因此每个列单元格都额外分配了一个标识符,该标识符从0cntr增长到表中的最后一个单元格。
因此,我尝试同时th_id9联系cntr0:
var table = (HtmlTableCell)ListView1.FindControl("th_id9") as System.Web.UI.HtmlControls.HtmlTableCell;
//var table2 = (HtmlTableCell)ListView1.FindControl("ctrl0") as System.Web.UI.HtmlControls.HtmlTableCell;
var table3 = (TableCell)ListView1.FindControl("th_id9") as System.Web.UI.WebControls.TableCell;
//var table14 = (TableCell)ListView1.FindControl("ctrl0") as System.Web.UI.WebControls.TableCell;
var table5 = (TableRow)ListView1.FindControl("th_id9") as System.Web.UI.WebControls.TableRow;
//var table6 = (TableRow)ListView1.FindControl("ctrl0") as System.Web.UI.WebControls.TableRow;
var table17 = (HtmlTableCell)ListView1.FindControl("ctrl0_th_id9") as System.Web.UI.HtmlControls.HtmlTableCell;
使用注释行时出现类型转换错误
试过ListViewContainer
var table10 = (ListViewContainer)ListView1.FindControl("ctrl0") as System.Web.UI.HtmlControls.ListViewContainer;
但我收到一个错误:
由于其安全级别, “ListViewContainer”不可用。
您如何访问这些元素?
更新:
递归搜索成功地处理了这个任务,但只适用于第一个单元格。如果在循环中完成,它将变为无限
更新 v2.0:
你可以做一个重新分配ID:
table9 = (HtmlTableCell)ListView1.FindControlRecursive("th_id9") as System.Web.UI.HtmlControls.HtmlTableCell;
while(table9 != null)
{
table9.Visible = false;
table9.ID = "th_id11";
table9 = (HtmlTableCell)ListView1.FindControlRecursive("th_id9") as System.Web.UI.HtmlControls.HtmlTableCell;
}


您必须首先选择一个特定的行,然后在其中查找您需要的元素:
我依稀记得里面的控件
ItemTemplate只能从中的fill/generate条目访问ListView:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listviewitemeventargs(v=vs.110).aspx