如何:向 Table Web 服务器控件动态添加行和单元格
更新:2007 年 11 月
在运行时向 Table Web 服务器控件添加行和单元格的做法很常见。Table Web 服务器控件是专门为此任务设计的。
说明: |
---|
若要在“设计”视图中以可视化方式来设计表,请使用 HtmlTable 控件。如果您还需要以编程方式操作 HtmlTable 控件的内容,可将其行和单元格转换为 HtmlTableRow 和 HtmlTableCell 控件,方法是将其 runat 属性设置为 server。有关详细信息,请参见将 HTML 服务器控件转换为 HTML 元素。 |
Table Web 服务器控件中的行是 TableRow 类型的对象。Table 控件的 Rows 属性支持 TableRow 对象的集合。若要向表添加行,请向该集合添加 TableRow 对象。
类似地,TableRow 对象的 Cells 属性也支持 TableCell 类型的对象的集合。可以通过操作该集合来向行添加单元格。
向表动态添加行和单元格
若要添加行,请创建新的 TableRow 类型的对象:
Dim tRow As New TableRow() Table1.Rows.Add(tRow)
TableRow tRow = new TableRow(); Table1.Rows.Add(tRow);
若要向行添加单元格,请创建一个或多个 TableCell 类型的对象:
Dim tCell As New TableCell() tRow.Cells.Add(tCell)
TableCell tCell = new TableCell(); tRow.Cells.Add(tCell);
向新的单元格添加内容。向单元格添加内容有多种方法,如下表所示。
若要添加
执行此操作
静态文本
设置单元格的 Text 属性。
Controls
声明一个控件实例,然后将其添加到单元格的 Controls 集合。
同一单元格中既有文本又有控件
通过创建 Literal 类的实例来声明文本。像处理其他控件一样将该实例添加到单元格的 Controls 集合中。
说明: 默认情况下,动态添加到 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); } } }