"Сортировать как числа" в таблице

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Экшен не сортирует нормально, в столбце только числа, а сортировка все равно идет как текст, в чем проблема? Версия 5.10.0.1
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Только через костыли(( Примерно так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
int i = 0; // номер столбца, по которому сортировать
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderBy(s => s.Split(';')[i].Length).ThenBy(s => s.Split(';')[i]).ToList(); // сортируем строки списка по возрастанию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
Примечание: В столбце, по которому происходит сортировка, должны быть числа в формате 1,2,3...999 (!!!без нулей в начале, типа 001,0999 и т.п).
 
Последнее редактирование:

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Это странно, зачем тогда эта функция, если она не работает?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Функция работает, но скорее всего в этом дело http://zennolab.com/discussion/threads/sortirovka-spiska-cifry.21699/#post-144201. Хотя галочку поставить "Сортировать как числа" можно, хз короче.
Вроде, все что там написано, это до ввода "Сортировать как числа, если возможно".
Галка в таблицах по крайней мере сортирует, так же как сортировка по тексту. И странно что никто это не написал, мб я просто чего-то не знаю, но я пробовал разные типы таблиц: csv, xls и тд, везде одно и тоже.

UPD: Я тупанул, в таблице был заголовок, его нужно было либо удалить, либо пометить галкой как заголовок в настройках таблицы. После этого начал нормально сортировать.
 
Последнее редактирование:

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
254
Баллы
63
Блин, реально глючный инструмент.
Числа корректно вписаны, скрыл первую строку (заголовков) -- а всё-равно не сортирует нормально.
Как бы достучаться с этим до разработчиков?
Думаю таблицами многие пользуются. Важный инструмент
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 117
Баллы
113
Блин, реально глючный инструмент.
Числа корректно вписаны, скрыл первую строку (заголовков) -- а всё-равно не сортирует нормально.
Как бы достучаться с этим до разработчиков?
Думаю таблицами многие пользуются. Важный инструмент
Пришлите пож-ста пример данных, которыми таблица заполнена.
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
254
Баллы
63

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 117
Баллы
113
  • Спасибо
Реакции: Rimen

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
254
Баллы
63
Попробуйте очистить таблицу от пустых строк и только потом сортировать как числа.
Сработало. При условии если в столбце по которому сортировка нет пустых строк.
но это немного усложняет. Получается всем столбцам без значения в конкретном столбце нужно 0 добавлять чтобы работало.

Спасибо в общем
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
254
Баллы
63
Новый вопрос: как можно отсортировать таблицу по убыванию (или возрастанию) чисел не учитывая первую строку?

Отмечать этот чекбокс не вариант т.к. таблица создается непосредственно в логике зенки и в ней же добавляется первая строка с заголовками столбцов

81704
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
если без кода и без кучи кубиков, то после создания заголовков можно привязаться к другой зеннотаблице, где галка есть
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
254
Баллы
63

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

KotAbormot

Client
Регистрация
31.03.2022
Сообщения
2
Благодарностей
0
Баллы
1
Только через костыли(( Примерно так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
int i = 0; // номер столбца, по которому сортировать
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderBy(s => s.Split(';')[i].Length).ThenBy(s => s.Split(';')[i]).ToList(); // сортируем строки списка по возрастанию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
Примечание: В столбце, по которому происходит сортировка, должны быть числа в формате 1,2,3...999 (!!!без нулей в начале, типа 001,0999 и т.п).

а можете подсказать как будет выглядеть код если сортировка нужно по убыванию. Благодарю за помощь.
 

Johnson

Новичок
Регистрация
16.09.2021
Сообщения
8
Благодарностей
0
Баллы
1
Только через костыли(( Примерно так:
C#:
IZennoTable table = project.Tables["Table"]; // таблица проекта
int i = 0; // номер столбца, по которому сортировать
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderBy(s => s.Split(';')[i].Length).ThenBy(s => s.Split(';')[i]).ToList(); // сортируем строки списка по возрастанию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
Примечание: В столбце, по которому происходит сортировка, должны быть числа в формате 1,2,3...999 (!!!без нулей в начале, типа 001,0999 и т.п).
Сортировка работает, спасибо.
Но если задача требует отсортировать но убыванию, то просто заменить OrderBy на OrderByDescending не достаточно - сортируется как-то странно. Видимо надо поменять еще что-то в параметрах:
(s => s.Split(';').Length).ThenBy(s => s.Split(';')).ToList()

Присоединяюсь к предыдущему спрашивающему - подскажите, пожалуйста, как именно соствить C# код для такой задачи?
 

Johnson

Новичок
Регистрация
16.09.2021
Сообщения
8
Благодарностей
0
Баллы
1
Спросил у ЧатГПТ - получил правильно-работающий результат - надо 5-ю строку изменить на
tmpList = tmpList.OrderByDescending(s => s.Split(';').Length).ThenByDescending(s => s.Split(';')).ToList();
 

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