by WebSurfer
2010年9月9日 13:12
System.Web.UI.WebControls.Table の話です。
Table オブジェクトの、ある行のコピーを作って、その Table に追加するにはどうしたらいいでしょうか? 以下のような感じです。
|
|
オリジナル
|
一行コピー後
|
上のオリジナルの画像を作ったコードは以下の通りです。
<asp:Table id="Table1"
runat="server"
CellPadding="10"
GridLines="Both"
HorizontalAlign="Center">
<asp:TableRow>
<asp:TableCell>
Item
</asp:TableCell>
<asp:TableCell>
Description
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell>
Row 0, Col 0
</asp:TableCell>
<asp:TableCell>
Row 0, Col 1
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell>
Row 1, Col 0
</asp:TableCell>
<asp:TableCell>
Row 1, Col 1
</asp:TableCell>
</asp:TableRow>
</asp:Table>
この Table1 の一行目のコピーをプログラムで動的に作って、最終行の下に追加することを考えてみます。
以下のようにするとどうなるでしょう?
TableRow newRow = new TableRow();
newRow = Table1.Rows[0];
Table1.Rows.Add(newRow);
うまくいきそうに見えますが、これだと一行目が最下行の下に移動するだけです。
以下のように、TableRow だけでなく、その中身の TableCell のコピーも作って
TableRow に設定し、それを Table に追加してやる必要があります。
TableRow newRow = new TableRow();
foreach (TableCell cell in Table1.Rows[0].Cells)
{
TableCell newCell = new TableCell();
newCell.Text = cell.Text;
newRow.Cells.Add(newCell);
}
Table1.Rows.Add(newRow);
Table コンロトールはほとんど使わないし、実際にこのようなことをすることはなさそうなので、役に立たない話かもしれません。(汗) でも、昔、せっかく考えたことなので、忘れないように書いておきます。