2010-10-25 38 views

回答

24

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> 

原来,现在没有实际意义回答如下:

你可能wa nt尝试HtmlTable类代替:

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

那么这个Asp有什么好处:表? 我可以用C#代码编程创建HtmlTable吗? – Primoz 2010-10-25 15:30:04

+1

是的,[你可以](http://msdn.microsoft.com/en-us/library/wwhe0at8%28v=VS.80%29.aspx),即使语法可能不太清晰。 – 2010-10-25 15:35:59

+1

出于好奇,那么这个Asp有什么好处:表? – Primoz 2010-10-25 15:47:49

18

Frédéric的回答是不准确的。 asp:表格确实支持<tbody><thead>标签,但其表现形式不如HtmlTable。

UseAccessibleHeader是真的默认的表,这意味着你的标题行会与<th>代替<td>正确地呈现,但要获得<tbody><thead>标签,你刚刚在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模板来完成这个任务。

+0

你说得对,我站得更正了。由于我无法删除我的答案而不支持你的答案(接受的答案不能被删除),我用你提供的信息修复了答案。希望你不介意:) – 2012-05-30 19:51:25

+2

没问题,总是乐于分享对神秘ASP.NET世界的洞察力。 ;-) – jfsaliba 2012-06-21 14:43:25

+1

是否可以动态创建多个tbody? – user1 2013-06-27 20:48:03