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

  • Автор темы Автор темы Art4D
  • Дата начала Дата начала

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Реакции
48
Баллы
28
Экшен не сортирует нормально, в столбце только числа, а сортировка все равно идет как текст, в чем проблема? Версия 5.10.0.1
nAyYpjlFEPR5AZ.jpg
 
Только через костыли(( Примерно так:
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 и т.п).
 
Последнее редактирование:
Это странно, зачем тогда эта функция, если она не работает?
 
Функция работает, но скорее всего в этом дело http://zennolab.com/discussion/threads/sortirovka-spiska-cifry.21699/#post-144201. Хотя галочку поставить "Сортировать как числа" можно, хз короче.
Вроде, все что там написано, это до ввода "Сортировать как числа, если возможно".
Галка в таблицах по крайней мере сортирует, так же как сортировка по тексту. И странно что никто это не написал, мб я просто чего-то не знаю, но я пробовал разные типы таблиц: csv, xls и тд, везде одно и тоже.

UPD: Я тупанул, в таблице был заголовок, его нужно было либо удалить, либо пометить галкой как заголовок в настройках таблицы. После этого начал нормально сортировать.
 
Последнее редактирование:
Блин, реально глючный инструмент.
Числа корректно вписаны, скрыл первую строку (заголовков) -- а всё-равно не сортирует нормально.
Как бы достучаться с этим до разработчиков?
Думаю таблицами многие пользуются. Важный инструмент
 
Блин, реально глючный инструмент.
Числа корректно вписаны, скрыл первую строку (заголовков) -- а всё-равно не сортирует нормально.
Как бы достучаться с этим до разработчиков?
Думаю таблицами многие пользуются. Важный инструмент
Пришлите пож-ста пример данных, которыми таблица заполнена.
 
  • Оценить
Реакции: Rimen
Попробуйте очистить таблицу от пустых строк и только потом сортировать как числа.
Сработало. При условии если в столбце по которому сортировка нет пустых строк.
но это немного усложняет. Получается всем столбцам без значения в конкретном столбце нужно 0 добавлять чтобы работало.

Спасибо в общем
 
Новый вопрос: как можно отсортировать таблицу по убыванию (или возрастанию) чисел не учитывая первую строку?

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

81704
 
если без кода и без кучи кубиков, то после создания заголовков можно привязаться к другой зеннотаблице, где галка есть
 
Только через костыли(( Примерно так:
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 и т.п).


а можете подсказать как будет выглядеть код если сортировка нужно по убыванию. Благодарю за помощь.
 
Только через костыли(( Примерно так:
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# код для такой задачи?
 
Спросил у ЧатГПТ - получил правильно-работающий результат - надо 5-ю строку изменить на
tmpList = tmpList.OrderByDescending(s => s.Split(';').Length).ThenByDescending(s => s.Split(';')).ToList();
 

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