Как создать thead и tbody в ASP.NET Table? - PullRequest
21 голосов
/ 25 октября 2010

Как создать thead и tbody в ASP.NET Table? Мне нужны эти теги, потому что jquery и asp.net дают мне только tr, th и td.

Ответы [ 2 ]

28 голосов
/ 25 октября 2010

asp: Таблица не поддерживает эти элементы.

Обновление: Как ответ Джаме показывает, что приведенное выше предложение совершенно неверно: свойство 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>
20 голосов
/ 11 мая 2012

Ответ Фредерика не точный.asp: Таблица фактически поддерживает теги <tbody> и <thead>, но менее очевидно, чем HtmlTable.

UseAccessibleHeader по умолчанию имеет значение true для таблиц, что означает строки заголовкабудет отображаться правильно с <th> вместо <td>, но чтобы получить теги <tbody> и <thead>, вам просто нужно установить вуду в Page_Load и когда вы создаете / вставляете свои строки вcodebehind.

Вот мой пример 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 ;Похоже, вы можете сделать это с помощью шаблона asp: Table.

...