2009-05-22 30 views
0

在ASP.Net表或HtmlTable中是否存在equivilent,以在HTML中将元素设置为将样式或类应用于整个列中的<col> </col >/col >?理想情况下,我期望以WebPart而不是ASP.Net设计器的方式编程。ASP.Net HtmlTable - 任何等价于<col></col>?

回答

0

的HTMLTABLE可能包含HtmlGenericControls,它给你一个山坳:

var t = new HtmlTable(); 
t.Controls.Add(new HtmlGenericControl("col")); 
+0

它不工作,在.NET 4。 – 2011-01-03 23:47:48

0

http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmltable(v=VS.100).aspx,该<col>不HTMLTABLE支持。所以唯一的方法就是覆盖RenderChildren()方法。

Private Class MyHtmlTable 
    Inherits HtmlTable 

    Private _tableDefinitionCells As New ControlCollection(Me) 
    Public ReadOnly Property TableDefinitionCells As ControlCollection 
     Get 
      Return Me._tableDefinitionCells 
     End Get 
    End Property 

    Protected Overrides Sub RenderChildren(ByVal writer As System.Web.UI.HtmlTextWriter) 
     For Each c In Me._tableDefinitionCells.OfType(Of Control)() 
      c.RenderControl(writer) 
     Next 

     MyBase.RenderChildren(writer) 
    End Sub 

End Class 

你可以使用这个喜欢

Dim table = New MyHtmlTable() 
table.TableDefinitionCells.Add(New HtmlGenericControl("col")) 
0

这里是呈现为每列<col />标签表的一个子类:

public sealed class ColTable : Table 
{ 
    protected override void RenderContents(HtmlTextWriter writer) 
    { 
     for (int i = 0; i < GetColumnCount(); i++) 
     { 
      writer.RenderBeginTag(HtmlTextWriterTag.Col); 
      writer.RenderEndTag(); 
     } 
     base.RenderContents(writer); 
    } 

    private int GetColumnCount() 
    { 
     int maxCount = 0; 
     foreach (TableRow row in Rows) 
     { 
      int count = 0; 
      foreach (TableCell cell in row.Cells) 
      { 
       count += Math.Max(1, cell.ColumnSpan); 
      } 
      maxCount = Math.Max(count, maxCount); 
     } 
     return maxCount; 
    } 
} 
相关问题