我可以以编程方式将多个 元素插入到 asp:Table 中吗?

2023-12-19

另请参阅相关问题我们可以在同一个 https://stackoverflow.com/questions/3076708/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>生成表格,但我有兴趣看看是否可以做到这一点。


没有办法增强asp:Table功能为<tbody>只是以其属性。但我知道可以通过三种方法来实现这一点:

  1. 创建一个派生类System.Web.UI.WebControls.Table并重写它的方法RenderContents用你自己的逻辑。查看 .NET Framework 本机方法的默认实现(Table.RenderContents)以了解如何使用任何反汇编程序(例如 .NET Reflector)来管理它。

  2. (最难的方法)创建自己的asp:Table带有子类(TableBody、TableBodyRow、TableBodyCell 等);)

  3. Use asp:Repeater相反,像这样:

<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>

甚至使用子中继器(如果您有两个集合——按月的客户和价值,可能是更好的方法)

P.S.:通过查看您的示例,<th> inside <tbody>就 HTML 规则而言是不正确的。不要在那里使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以以编程方式将多个 元素插入到 asp:Table 中吗? 的相关文章

随机推荐