如何:向 Table Web 服务器控件动态添加行和单元格

更新:2007 年 11 月

在运行时向 Table Web 服务器控件添加行和单元格的做法很常见。Table Web 服务器控件是专门为此任务设计的。

7bewx260.alert_note(zh-cn,VS.90).gif说明:

若要在“设计”视图中以可视化方式来设计表,请使用 HtmlTable 控件。如果您还需要以编程方式操作 HtmlTable 控件的内容,可将其行和单元格转换为 HtmlTableRowHtmlTableCell 控件,方法是将其 runat 属性设置为 server。有关详细信息,请参见将 HTML 服务器控件转换为 HTML 元素

Table Web 服务器控件中的行是 TableRow 类型的对象。Table 控件的 Rows 属性支持 TableRow 对象的集合。若要向表添加行,请向该集合添加 TableRow 对象。

类似地,TableRow 对象的 Cells 属性也支持 TableCell 类型的对象的集合。可以通过操作该集合来向行添加单元格。

向表动态添加行和单元格

  1. 若要添加行,请创建新的 TableRow 类型的对象:

    Dim tRow As New TableRow()
    Table1.Rows.Add(tRow)
    
    TableRow tRow = new TableRow();
    Table1.Rows.Add(tRow);
    
  2. 若要向行添加单元格,请创建一个或多个 TableCell 类型的对象:

    Dim tCell As New TableCell()
    tRow.Cells.Add(tCell)
    
    TableCell tCell = new TableCell();
    tRow.Cells.Add(tCell);
    
  3. 向新的单元格添加内容。向单元格添加内容有多种方法,如下表所示。

    若要添加

    执行此操作

    静态文本

    设置单元格的 Text 属性。

    Controls

    声明一个控件实例,然后将其添加到单元格的 Controls 集合。

    同一单元格中既有文本又有控件

    通过创建 Literal 类的实例来声明文本。像处理其他控件一样将该实例添加到单元格的 Controls 集合中。

    7bewx260.alert_note(zh-cn,VS.90).gif说明:

    默认情况下,动态添加到 Web 窗体页的控件会被添加到页的视图状态。如果您每次往返时都重新创建控件,则将导致在处理页时出现无法预计的行为,其原因在于视图状态在控件重新创建之前已经恢复。通过将容器控件(例如 Table 控件)的 EnableViewState 属性设置为 false 可避免相应问题。有关更多信息,请参见 以编程方式添加 ASP.NET 控件

    下面的代码示例演示您可以向 Table 控件添加行和单元格。行与列的数目是由用户输入到两个文本框的数字决定的。每个单元格以静态文本形式显示其行号和单元格号。

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
       ' Total number of rows.
       Dim rowCnt As Integer
       ' Current row count
       Dim rowCtr As Integer
       ' Total number of cells (columns).
       Dim cellCtr As Integer
       ' Current cell counter.
       Dim cellCnt As Integer
    
       rowCnt = CInt(Textbox1.Text)
       cellCnt = CInt(Textbox2.Text)
    
       For rowCtr = 1 To rowCnt
          Dim tRow As New TableRow()
          For cellCtr = 1 To cellCnt
             Dim tCell As New TableCell()
             tCell.Text = "Row " & rowCtr & ", Cell " & cellCtr
             ' Add new TableCell object to row.
             tRow.Cells.Add(tCell)
          Next
          ' Add new row to table.
          Table1.Rows.Add(tRow)
       Next
    
    End Sub
    
    protected void Button1_Click (object sender, System.EventArgs e)
    {
       // Total number of rows.
       int rowCnt;
       // Current row count.
       int rowCtr;
       // Total number of cells per row (columns).
       int cellCtr;
       // Current cell counter
       int cellCnt;
    
       rowCnt = int.Parse(TextBox1.Text);
       cellCnt = int.Parse(TextBox2.Text);
    
       for(rowCtr=1; rowCtr <= rowCnt; rowCtr++) {
          // Create new row and add it to the table.
          TableRow tRow = new TableRow();
          Table1.Rows.Add(tRow);
          for (cellCtr = 1; cellCtr <= cellCnt; cellCtr++) {
             // Create a new cell and add it to the row.
             TableCell tCell = new TableCell();
             tCell.Text = "Row " + rowCtr + ", Cell " + cellCtr;
             tRow.Cells.Add(tCell);
          }
       }
    }
    

    下面的代码示例与前面的示例类似,但将在每个单元格中显示静态文本和 HyperLink 控件。HyperLink 控件定位到一个模拟的 URL,传递一个模拟产品 ID。由于该示例混合了静态文本和控件,因此静态文本以 Literal 对象的形式实现,像 HyperLink 控件一样添加到单元格的 Controls 集合中。

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
       ' Total number of rows.
       Dim rowCnt As Integer
       ' Current row count
       Dim rowCtr As Integer
       ' Total number of cells (columns).
       Dim cellCtr As Integer
       ' Current cell counter.
       Dim cellCnt As Integer
    
       rowCnt = CInt(TextBox1.Text)
       cellCnt = CInt(TextBox2.Text)
    
       For rowCtr = 1 To rowCnt
          Dim tRow As New TableRow()
          For cellCtr = 1 To cellCnt
             Dim tCell As New TableCell()
             ' Mock up a product ID
             Dim prodID As String
             prodID = rowCtr & "_" & cellCtr
    
             ' Create literal text as control.
             Dim s As New LiteralControl()
             s.Text = "Buy: "
             ' Add to cell.
             tCell.Controls.Add(s)
             ' Create Hyperlink Web Server control and add to cell.
             Dim h As New HyperLink()
             h.Text = rowCtr & ":" & cellCtr
             h.href = "https://www.microsoft.com/net"
             ' Add cell to row.
             tCell.Controls.Add(h)
             ' Add new TableCell object to row.
             tRow.Cells.Add(tCell) 
          Next cellCtr
          ' Add new row to table.
          Table1.Rows.Add(tRow) 
       Next rowCtr
    End Sub
    
    Protected void Button1_Click (object sender, System.EventArgs e)
    {
       // Total number of rows.
       int rowCnt;
       // Current row count.
       int rowCtr;
       // Total number of cells per row (columns).
       int cellCtr;
       // Current cell counter.
       int cellCnt;
    
    
       rowCnt = int.Parse(TextBox1.Text);
       cellCnt = int.Parse(TextBox2.Text);
    
       for(rowCtr=1; rowCtr <= rowCnt; rowCtr++) {
          // Create a new row and add it to the table.
          TableRow tRow = new TableRow();
          Table1.Rows.Add(tRow);
          for (cellCtr = 1; cellCtr <= cellCnt; cellCtr++) {
             // Create a new cell and add it to the row.
             TableCell tCell = new TableCell();
             tRow.Cells.Add(tCell);               
             // Mock up a product ID.
             string prodID = rowCtr + "_" + cellCtr;
    
             // Add a literal text as control.
             tCell.Controls.Add(new LiteralControl("Buy: "));
             // Create a Hyperlink Web server control and add it to the cell.
             System.Web.UI.WebControls.HyperLink h = new HyperLink();
             h.Text = rowCtr + ":" + cellCtr;
             h.href = "https://www.microsoft.com/net";
             tCell.Controls.Add(h);
          }
       }
    }
    

请参见

参考

Table、TableRow 和 TableCell Web 服务器控件概述