2010-10-25 15 views

risposta

24

asp:Table non supporta questi elementi.

Aggiornamento: Comejameh's answer rivela, la frase di cui sopra è completamente sbagliato: la proprietà TableSection permette di controllare se una data riga va nella tabella di intestazione, corpo o piè di pagina.

Per approfondire la sua risposta, a quanto pare si può anche raggiungere questo obiettivo in modo dichiarativo impostando la proprietà TableSection nel markup, senza codice dietro:

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

originale, ora discutibile la risposta è la seguente:

Si potrebbe NT per provare la classe HtmlTable invece: risposta

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

A che serve questo Asp: Table? Posso creare HtmlTable in modo programmatico con il codice C#? – Primoz

+1

Sì, [è possibile] (http://msdn.microsoft.com/en-us/library/wwhe0at8%28v=VS.80%29.aspx), anche se la sintassi è probabilmente meno chiara. –

+1

Per curiosità, a che serve questo Asp: Table? – Primoz

18

di Frédéric non è accurato. asp: Table DOES supporta infatti i tag <tbody> e <thead>, ma in modo meno ovvio di HtmlTable.

UseAccessibleHeader vale per impostazione predefinita per le tabelle, il che significa che le righe di intestazione sarà reso correttamente con <th> invece di <td>, ma per ottenere il <tbody> e <thead> tag, hai appena avuto modo di impostare alcune voodoo a Page_Load e quando stai creando/inserendo le tue righe nel codebehind.

Ecco il mio esempio asp: Table markup:

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

A Page Load, si precisa che il nostro TableHeaderRow1 dovrebbe essere un TableHeader:

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

E, infine, nella funzione che inserisce righe in detto tabella, devi solo specificare che il TableRowSection di ogni riga che aggiungi è un 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 

È possibile eseguire ulteriori letture su TableRowSection property; sembra che tu possa farlo anche con il tuo asp: modello di tabella.

+0

Hai ragione, sono corretto. Poiché non ho potuto cancellare la mia risposta a favore della tua (le risposte accettate non possono essere cancellate), l'ho corretto con le informazioni che hai fornito. Spero non ti dispiaccia :) –

+2

Nessun problema, sempre felice di condividere le tue conoscenze sul mondo criptico di ASP.NET. ;-) – jfsaliba

+1

È possibile creare più tbodies in modo dinamico? – user1

Problemi correlati