Практическое руководство. Динамическое добавление строк и ячеек в серверный веб-элемент управления Table

Visual Studio 2010

Обновлен: Ноябрь 2007

Часто строки и ячейки добавляются в серверный веб-элемент управления Table во время работы. Серверный веб-элемент управления Table разработан специально для этой задачи.

7bewx260.alert_note(ru-ru,VS.100).gifПримечание.

Для создания таблицы, видимой в режиме конструктора, необходимо использовать элемент управления HtmlTable. Если требуется программное изменение содержимого элемента управления HtmlTable, нужно преобразовать его строки и ячейки в элементы управления HtmlTableRow и HtmlTableCell, присвоив их атрибутам runat значение server. Дополнительные сведения см. в разделе Converting HTML Server Controls to HTML Elements.

Строки в серверном веб-элементе управления Table являются объектами типа TableRow. Свойство Rows элемента управления Table поддерживает коллекцию объектов 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 ячейки.

    Текст и элементы управления в одной ячейке

    Задайте текст, создав экземпляр класса Literal. Так же как и другие элементы управления, добавьте данный экземпляр в коллекцию Controls ячейки.

    7bewx260.alert_note(ru-ru,VS.100).gifПримечание.

    По умолчанию элементы управления, добавляемые динамически на страницу Web Forms, добавляются в состояние отображения страницы. Если снова создавать элементы управления во время каждого цикла обработки, то это может привести к непредвиденному поведению во время обработки страницы, потому что режим просмотра восстанавливается до повторного создания элементов управления. Этих проблем можно избежать, задав свойству EnableViewState контейнерного элемента управления (например, элемента управления Table) значение 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, который добавляется в коллекцию Controls ячейки так же как и элемент управления HyperLink.

    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.NavigateUrl = "http://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.NavigateUrl = "http://www.microsoft.com/net";
             tCell.Controls.Add(h);
          }
       }
    }
    
Показ: