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