2011-06-08 36 views
4

我有这样一个asp.net表控制:不能重复的行添加到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); 
      } 
     } 

但是,当我执行此代码它甫一在桌子上不改变原来的行和列数覆盖。感谢您的帮助....

回答

1

它会被覆盖,因为您覆盖引用。你不做一个副本,实质上row = new TableRow()什么都不做。您可以使用 myTable.ImportRow(myTable.Rows[1])。调整

基于响应尝试:
row = myTable.Rows[1].MemberwiseClone();

+1

我找不到ImportRow方法。我正在使用ASP.net表格控件 – osmanabi 2011-06-08 08:39:41

+0

无法找到MemberWiseClone方法。我认为它是受保护的...... – osmanabi 2011-06-08 08:59:02

+0

您可以在派生类的上下文中或仅在该类中访问MemberwiseClone。 – sanjuro 2011-06-08 09:43:46

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); 
} 
+0

从上面的代码中,您可以创建复制表格行的方法 – sanjuro 2011-06-08 09:41:36

+0

但此代码只是复制文本属性,在我的单元格中我有Textboxes和FilteredTextBoxExtender(ajaxToolkits)我也必须克隆它们... – osmanabi 2011-06-08 09:50:55

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); 
     } 
    }