Как добавить строку не в конец, а в начало таблицы?

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
29
Баллы
8
Привет,

Проблема в заголовке.

Через "Операции над таблицей" и через C# я не вижу таких возможностей (project.Tables["Text"].AddRow - добавляет строку вниз таблицы). Видимо надо как-то заморачиваться с удалением всех данных в таблице и перезаписыванием заново. Но может кто знает простой способ?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
не сталкивался с таким, но что первое пришло в голову это
брать готовый список и из него построчно переносить в другой список, и по итогу все строки встанут снизу вверх
но возможно по времени это будет долго, в зависимости от количества строк. На С# такая реализация будет быстрее.
попробуйте
 

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
29
Баллы
8
не сталкивался с таким, но что первое пришло в голову это
брать готовый список и из него построчно переносить в другой список, и по итогу все строки встанут снизу вверх
но возможно по времени это будет долго, в зависимости от количества строк. На С# такая реализация будет быстрее.
попробуйте
Спасибо за ответ. Именно такой способ и вертется в голове, но может есть более простой способ стандартными средствами ZP?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Спасибо за ответ. Именно такой способ и вертется в голове, но может есть более простой способ стандартными средствами ZP?
на кубиках работы с таблицами вроде есть возможность положить строку в начало
 

Фермер

Client
Регистрация
05.05.2016
Сообщения
81
Благодарностей
9
Баллы
8
Попробуй через список. В нем можно добавлять как в конец, так и в начало
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
в последней версии есть такая возможность :-)

 

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
29
Баллы
8

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
29
Баллы
8
Попробуй через список. В нем можно добавлять как в конец, так и в начало
Надо таблица, т.к. строка разделяется на части с помощью разделителя ; и каждая часть присваивается своей переменной
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Надо таблица, т.к. строка разделяется на части с помощью разделителя ; и каждая часть присваивается своей переменной
я бы советовал работать со списками. Надежнее. А разбить строку по ; в переменные можно через групповые регулярки или c#
 

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
29
Баллы
8
я бы советовал работать со списками. Надежнее. А разбить строку по ; в переменные можно через групповые регулярки или c#
Спасибо за совет. По вашим наблюдениям из практики в чем надежность списка перед таблицей?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Спасибо за совет. По вашим наблюдениям из практики в чем надежность списка перед таблицей?
Таблицы бьются с большей долей вероятности при каких-то аварийных ситуациях по миом наблюдениям. Опять же, список решает проблему этого топика. + нравится момент, что если мы взяли строку, то мы потом её же без проблем можем положить в список. Она у нас уже в переменной со всеми разделителями. А вот в таблице пришлось бы собирать это дело из данных, разбитых по переменным. И чем больше переменных - тем напряжнее это делать
 

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
29
Баллы
8
Таблицы бьются с большей долей вероятности при каких-то аварийных ситуациях по миом наблюдениям. Опять же, список решает проблему этого топика. + нравится момент, что если мы взяли строку, то мы потом её же без проблем можем положить в список. Она у нас уже в переменной со всеми разделителями. А вот в таблице пришлось бы собирать это дело из данных, разбитых по переменным. И чем больше переменных - тем напряжнее это делать
Хороший развернутый ответ. Учту на будущее. Может даже и кода получилось бы меньше.

Для тех, кто все-таки предпочтет работать с таблицами, вот пример моего кода на C#. Может кому пригодится

Код:
// объявляем переменные
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++)
    {
        // после добавления данных из каждой ячейки добавляется разделитель
        // по-нормальному, его надо бы удалять после формирования строки на основе всех столбцов
        // но я не заморачивался с этим моментом. Просто в таблице будет лишняя колонка после пересоздания
        row += project.Tables["TestTable"].GetCell(j,i) + separator;
    }
    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]);
}
 

ZennoCat

Client
Регистрация
06.01.2020
Сообщения
35
Благодарностей
8
Баллы
8
Хороший развернутый ответ. Учту на будущее. Может даже и кода получилось бы меньше.

Для тех, кто все-таки предпочтет работать с таблицами, вот пример моего кода на C#. Может кому пригодится

Код:
// объявляем переменные
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++)
    {
        // после добавления данных из каждой ячейки добавляется разделитель
        // по-нормальному, его надо бы удалять после формирования строки на основе всех столбцов
        // но я не заморачивался с этим моментом. Просто в таблице будет лишняя колонка после пересоздания
        row += project.Tables["TestTable"].GetCell(j,i) + separator;
    }
    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]);
}
Кажется удалось немного поправить, чтобы не создавалась лишняя колонка:


C#:
// объявляем переменные
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]);
}
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)