方法 : Table Web サーバー コントロールに行およびセルを動的に追加する

更新 : 2007 年 11 月

Table Web サーバー コントロールに実行時に行やセルを追加する操作は、よく行われます。Table Web サーバー コントロールは、このタスクを行うために設計されています。

7bewx260.alert_note(ja-jp,VS.90).gifメモ :

デザイン ビューでテーブルをビジュアルに設計するには、HtmlTable コントロールを使用します。また、HtmlTable コントロールのコンテンツをプログラムからも操作する必要がある場合は、行とセルの runat 属性に server を設定することで、それぞれ HtmlTableRow コントロールと HtmlTableCell コントロールに変換します。詳細については、「HTML サーバー コントロールから HTML 要素への変換」を参照してください。

Table Web サーバー コントロールの行は、TableRow 型のオブジェクトです。Table コントロールの Rows プロパティは、TableRow オブジェクトのコレクションをサポートします。テーブルに行を追加するには、このコレクションに TableRow オブジェクトを追加します。

同様に、TableRow オブジェクトには、TableCell 型のオブジェクトのコレクションをサポートする Cells プロパティがあります。このコレクションを操作して、行にセルを追加できます。

テーブルに行とセルを動的に追加するには

  1. 行を追加するには、TableRow 型の新しいオブジェクトを作成します。

    Dim tRow As New TableRow()
    Table1.Rows.Add(tRow)
    
    TableRow tRow = new TableRow();
    Table1.Rows.Add(tRow);
    
  2. 行にセルを追加するには、1 つ以上の 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(ja-jp,VS.90).gifメモ :

    既定では、Web フォーム ページに動的に追加するコントロールは、ページのビューステートに追加されます。ラウンド トリップごとにコントロールを再作成する場合は、コントロールが再作成される前にビューステートが元の状態に戻るため、ページを処理するときに予測不可能な動作が起こる可能性があります。この問題を回避するには、コンテナ コントロール (Table コントロールなど) の EnableViewState プロパティを false に設定します。詳細については、「プログラムによる ASP.NET コントロールの追加」を参照してください。

    Table コントロールに行とセルを追加する方法を次のコード例に示します。行数と列数は、2 つのテキスト ボックスに入力した内容によって決まります。各セルには、静的テキストとして行とセルの番号が表示されます。

    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 サーバー コントロールの概要