另请参阅相关问题can we have multiple <tbody> in same <table>?
假设我想使用asp:table:
生成下表<table>
<thead>
...stuff...
</thead>
<tbody class="odd">
<th scope="tbody">CUSTOMER 1</th>
<tr><td>#1</td><td>January</td></tr>
<tr><td>#2</td><td>April</td></tr>
<tr><td>#3</td><td>March</td></tr>
</tbody>
<tbody class="even">
<th scope="tbody">CUSTOMER 2</th>
<tr><td>#1</td><td>January</td></tr>
<tr><td>#2</td><td>April</td></tr>
<tr><td>#3</td><td>March</td></tr>
</tbody>
<tbody class="odd">
<th scope="tbody">CUSTOMER 3</th>
<tr><td>#1</td><td>January</td></tr>
<tr><td>#2</td><td>April</td></tr>
<tr><td>#3</td><td>March</td></tr>
</tbody>
</table>
我可以通过编程方式构建这些<tbody>
/ <tr>
元素吗?
我尝试过这样的事情:
var x = new HtmlGenericControl("tbody");
x.Attributes["class"] = jobNum % 2 == 0 ? "even" : "odd";
TableRow xinfoRow = buildXInfoRow(job); x.Controls.Add(xinfoRow);
TableRow xdescriptionRow = buildXDescriptionRow(job); x.Controls.Add(xdescriptionRow);
myTable.Controls.Add(x);
但这只是给我错误'Table' cannot have children of type 'HtmlGenericControl'
。
我可以找到一个TableRow,TableCell,TableHeaderRow,TableHeaderCell等类,但我似乎无法找到TableBody或TableHeader。我可以在页眉,正文或页脚中放置行:
descriptionRow.TableSection = TableRowSection.TableBody;
...但我似乎无法将行划分为多个不同的<tbody>
元素。我已经放弃了并且使用<asp:ListView>
来生成表格,但我很想知道是否可以这样做。
答案 0 :(得分:1)
仅使用其属性无法增强asp:Table
的{{1}}功能。但是我知道如何实现这三种方式:
创建一个派生自<tbody>
的类,并使用您自己的逻辑覆盖其方法System.Web.UI.WebControls.Table
。查看.NET Framework本机方法(RenderContents
)的默认实现,以了解如何使用.NET Reflector等反汇编程序来管理它。
(最难的方式)创建自己的Table.RenderContents
子类(TableBody,TableBodyRow,TableBodyCell等);)
请改为使用asp:Table
:
asp:Repeater
或甚至使用子转发器(如果您有两个收集,可能是更好的方式 - 按月份的客户和价值)
P.S。:通过查看您的示例,<asp:Repeater ...>
<HeaderTemplate>
<table>
<thead>
..stuff..
</thead>
<tbody class="odd">
</HeaderTemplate>
<ItemTemplate>
<tr> ..stuff.. </tr>
</ItemTemplate>
<SeparatorTemplate>
<asp:PlaceHolder Visible='<%# (Container.ItemIndex + 1) % 3 %>' runat="server">
<tbody class="<%# (Container.ItemIndex + 1) % 6 > 3 ? "even" : "odd" %>">
</asp:PlaceHolder>
</SeparatorTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
内的<th>
在HTML规则方面不正确。不要在那里使用它。