Не удается добавить дублирующуюся строку в asp.net Элемент управления таблицей

#c# #asp.net

#c# #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:

Как упоминалось выше, вы переписываете ссылку. Создайте новую строку. Добавьте ее в таблицу, а затем скопируйте значения ячеек любым удобным для вас способом. Что-то вроде:

 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. но этот код просто копирует атрибут text, в моих ячейках у меня есть текстовые поля и FilteredTextBoxExtender (ajaxToolkits) Я тоже должен их клонировать…

Ответ №2:

Он перезаписывается, потому что вы перезаписываете ссылку. Вы не выполняете копирование, по сути, row = new TableRow() ничего не делаете.

Вам следует использовать myTable.ImportRow(myTable.Rows[1]) .

Скорректировано на основе ответа try:
row = myTable.Rows[1].MemberwiseClone();

Комментарии:

1. Я не смог найти метод ImportRow. Я использую ASP.net Элемент управления таблицей

2. вы можете получить доступ к MemberwiseClone в контексте производного класса или только внутри самого этого класса.

Ответ №3:

итак, попробуйте это

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