【问题标题】:How to create thead and tbody in ASP.NET Table ?如何在 ASP.NET Table 中创建 thead 和 tbody ?
【发布时间】:2011-04-30 06:33:07
【问题描述】:

如何在ASP.NET Table 中创建thead 和tbody?我需要这些标签,因为 jquery 和 asp.net 只给了我 tr、th 和 td。

【问题讨论】:

    标签: jquery asp.net html-table


    【解决方案1】:

    asp:Table 不支持这些元素。

    更新: 正如jameh's answer 所揭示的,上面的句子是完全错误的:TableSection 属性允许控制 给定的行是否进入表格的页眉、正文或页脚。

    要详细说明他的答案,您似乎甚至可以通过在标记中设置 TableSection 属性以声明方式实现此目的,而无需隐藏代码:

    <asp:Table id="yourId" runat="server">
        <asp:TableHeaderRow TableSection="TableHeader">
            <!-- ... -->
        </asp:TableHeaderRow>
        <asp:TableRow>
            <!-- 'TableSection' defaults to 'TableRowSection.TableBody'. -->
            <!-- ... -->
        </asp:TableRow>
        <asp:TableRow TableSection="TableFooter">
            <!-- ... -->
        </asp:TableRow>
    </asp:Table>
    

    原始的,现在没有实际意义的答案如下:

    您可能想改用HtmlTable 类:

    <table id="yourId" runat="server">
        <thead>
            .
            .
            .
        </thead>
        <tbody>
            .
            .
            .
        </tbody>
    </table>
    

    【讨论】:

    • 那么这个 Asp:Table 有什么用?我可以使用 C# 代码以编程方式创建 HtmlTable 吗?
    • 是的,you can,即使语法可能不太清楚。
    • asp:Table 与其他 Web 服务器控件一致。它通常比HtmlTable 更容易开发。见developerfusion.com/article/4410/in-depth-aspnet-using-adonet/3
    • 阅读 jameh 的回答。这可以用 asp:Table
    • @InvisibleBacon,完成,并相应地更正了答案。感谢您的提醒:)
    【解决方案2】:

    Frédéric 的回答并不准确。 asp:Table 实际上支持&lt;tbody&gt;&lt;thead&gt; 标签,但不如HtmlTable 明显。

    UseAccessibleHeader 对于表格默认为 true,这意味着您的标题行将使用 &lt;th&gt; 而不是 &lt;td&gt; 正确呈现,但要获得 &lt;tbody&gt;&lt;thead&gt; 标签,您刚刚得到在 Page_Load 以及在代码隐藏中创建/插入行时设置一些巫术。

    这是我的 asp 示例:表格标记:

    <asp:Table runat="server" ID="tblGeneral">
        <asp:TableHeaderRow ID="TableHeaderRow1" runat="server">
            <asp:TableHeaderCell ID="TableHeaderCell1" runat="server">Column 1</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell2" runat="server">Column 2</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell3" runat="server">Column 3</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell4" runat="server">Column 4</asp:TableHeaderCell>
            <asp:TableHeaderCell ID="TableHeaderCell5" runat="server">Column 5</asp:TableHeaderCell>
        </asp:TableHeaderRow>
    </asp:Table>
    

    在 Page_Load 中,我们指定 TableHeaderRow1 应该是 TableHeader:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        TableHeaderRow1.TableSection = TableRowSection.TableHeader      
    End Sub
    

    最后,在将行插入所述表的函数中,您只需指定添加的每一行的 TableRowSection 是一个 TableBody:

    Dim row As TableRow
    Dim dvRow As Data.DataRowView
    
    For Each dvRow In dv
        row = New TableRow
        row.TableSection = TableRowSection.TableBody 'THIS is the important bit
        cell = New TableCell
        Col1Stuff = New Label
        Col1Stuff.Text = "Blah"
        cell.Controls.Add(Col1Stuff)
        row.Cells.Add(cell)
    
        ...
    
    tblGeneral.Rows.Add(row)
    Next
    

    您可以在TableRowSection property 上进行更多阅读;看起来您也可以使用您的 asp:Table 模板完成此操作。

    【讨论】:

    • 你说得对,我的立场是正确的。由于我无法删除我的答案以支持您的答案(无法删除已接受的答案),因此我使用您提供的信息对其进行了修复。希望你不介意:)
    • 没问题,总是乐于分享对神秘 ASP.NET 世界的见解。 ;-)
    • 是否可以动态创建多个tbodies?