方法 : Table Web サーバー コントロールに行およびセルを動的に追加する
更新 : 2007 年 11 月
Table Web サーバー コントロールに実行時に行やセルを追加する操作は、よく行われます。Table Web サーバー コントロールは、このタスクを行うために設計されています。
メモ : |
---|
デザイン ビューでテーブルをビジュアルに設計するには、HtmlTable コントロールを使用します。また、HtmlTable コントロールのコンテンツをプログラムからも操作する必要がある場合は、行とセルの runat 属性に server を設定することで、それぞれ HtmlTableRow コントロールと HtmlTableCell コントロールに変換します。詳細については、「HTML サーバー コントロールから HTML 要素への変換」を参照してください。 |
Table Web サーバー コントロールの行は、TableRow 型のオブジェクトです。Table コントロールの Rows プロパティは、TableRow オブジェクトのコレクションをサポートします。テーブルに行を追加するには、このコレクションに TableRow オブジェクトを追加します。
同様に、TableRow オブジェクトには、TableCell 型のオブジェクトのコレクションをサポートする Cells プロパティがあります。このコレクションを操作して、行にセルを追加できます。
テーブルに行とセルを動的に追加するには
行を追加するには、TableRow 型の新しいオブジェクトを作成します。
Dim tRow As New TableRow() Table1.Rows.Add(tRow)
TableRow tRow = new TableRow(); Table1.Rows.Add(tRow);
行にセルを追加するには、1 つ以上の TableCell 型のオブジェクトを作成します。
Dim tCell As New TableCell() tRow.Cells.Add(tCell)
TableCell tCell = new TableCell(); tRow.Cells.Add(tCell);
新しいセルに内容を追加します。次の表は、追加の方法を示します。
追加する項目
方法
静的テキスト
セルの Text プロパティを設定します。
コントロール
コントロールのインスタンスを宣言し、セルの Controls コレクションに追加します。
テキストおよびコントロール (同じセル内)
Literal クラスのインスタンスを作成して、テキストを宣言します。他のコントロールの場合と同様に、セルの Controls コレクションに、宣言したテキストを追加します。
メモ : 既定では、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); } } }