Table Web サーバー コントロールに実行時に行やセルを追加する操作は、よく行われます。Table Web サーバー コントロールは、このタスクを行うために設計されています。
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.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);
}
}
}
参照