我有一个像这样的asp.net表控件:
TableHeader
A Text | Textbox
我想要做的是,在page_load事件中,复制第二行及其中的所有控件,更改第一个单元格中的文本并添加为新行。所以这是我的代码:
for (int i = 0; i < loop1counter; i++)
{
TableRow row = new TableRow();
row = myTable.Rows[1]; //Duplicate original row
char c = (char)(66 + i);
if (c != 'M')
{
row.Cells[0].Text = c.ToString();
myTable.Rows.Add(row);
}
}
但是当我执行这段代码时,它会覆盖原始行,并且表的行数不会改变。谢谢你的帮助....
答案 0 :(得分:2)
正如thekip所提到的,你正在重写参考文献。 创建一个新行。将其添加到网格中,然后以您想要的任何方式复制单元格值。 类似的东西:
TableRow tRow = new TableRow();
myTable.Rows.Add(tRow);
foreach (TableCell cell in myTable.Rows[1].Cells)
{
TableCell tCell = new TableCell();
tCell.Text = cell.Text;
tRow.Cells.Add(tCell);
}
答案 1 :(得分:1)
它会被覆盖,因为您覆盖了引用。你没有副本,基本上row = new TableRow()
什么也没做。
你应该使用
myTable.ImportRow(myTable.Rows[1])
。
根据回复调整尝试:
row = myTable.Rows[1].MemberwiseClone();
答案 2 :(得分:0)
所以试试这个
private TableRow CopyTableRow(TableRow row)
{
TableRow newRow = new TableRow();
foreach (TableCell cell in row.Cells)
{
TableCell tempCell = new TableCell();
foreach (Control ctrl in cell.Controls)
{
tempCell.Controls.Add(ctrl);
}
tempCell.Text = cell.Text;
newRow.Cells.Add(tempCell);
}
return newRow;
}
您的代码:
for (int i = 0; i < loop1counter; i++)
{
TableRow row = CopyTableRow(myTable.Rows[1]); //Duplicate original row
char c = (char)(66 + i);
if (c != 'M')
{
row.Cells[0].Text = c.ToString();
myTable.Rows.Add(row);
}
}