// объявляем переменные
List<string> newTableData = new List<string>();
string separator = ";";
// эта строка только для тестовых целей, если ваша таблица не содержит еще данных, то запишем в эту таблицу тестовые данные
project.Tables["TestTable"].AddRow("Тестовые данные: ячейка А" + separator + "Тестовые данные: ячейка B");
// записываем новые строки, которые надо добавить в начало таблицы
// когда надо добавить много строк, то тут может быть цикл. В данном примере добавляется только 1 строка в список
newTableData.Add("Ячейка А" + separator + "Ячейка B");
// записываем строки, которые уже хранятся в таблице ZP, в список C#
project.SendInfoToLog("Записываем данные, которые уже хранятся в таблице", true); // выводим сообщение в лог PM, ZP
for (int i = 0; i< project.Tables["TestTable"].RowCount ;i++)
{
string row = string.Empty;
for (int j =0; j < project.Tables["TestTable"].ColCount; j++)
{
// после добавления данных из каждой ячейки добавляется разделитель
// по-нормальному, его надо бы удалять после формирования строки на основе всех столбцов
// но я не заморачивался с этим моментом. Просто в таблице будет лишняя колонка после пересоздания
if (j == 0) {
row += project.Tables["TestTable"].GetCell(j,i);
} else {
row += separator + project.Tables["TestTable"].GetCell(j,i);
}
}
project.SendInfoToLog("Содержимое строки = " + row, true); // выводим сообщение в лог PM, ZP
newTableData.Add(row);
}
// очищаем содержимое таблицы
project.Tables["TestTable"].Clear();
// заносим новые данные в таблицу
for (int i =0; i<newTableData.Count; i++)
{
project.Tables["TestTable"].AddRow(newTableData[i]);
}