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

Art4D

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

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 140
Баллы
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 140
Баллы
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
Сообщения
411
Благодарностей
257
Баллы
63
Блин, реально глючный инструмент.
Числа корректно вписаны, скрыл первую строку (заголовков) -- а всё-равно не сортирует нормально.
Как бы достучаться с этим до разработчиков?
Думаю таблицами многие пользуются. Важный инструмент
 

Sergodjan

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

Rimen

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

Sergodjan

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

Rimen

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

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

Rimen

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

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

81704
 

doc

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

Rimen

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 652
Баллы
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();
 

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