0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
1 | |
Нестандартная сортировка в TreeView20.02.2018, 10:43. Показов 7151. Ответов 23
Метки нет (Все метки)
добрый день! снова меня сортировка в узлах treeview озадачила. не могу, не знаю, как отсортировать данные в узлах treeview.
сортировать нужно в порядке возрастания не цифр, а чисел...
0
|
20.02.2018, 10:43 | |
Ответы с готовыми решениями:
23
нестандартная сортировка Нестандартная сортировка Нестандартная сортировка Нестандартная сортировка |
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
20.02.2018, 11:14 | 2 |
А откуда туда берутся данные? Просто если это какая-то запись, где эти данные содержатся в виде полей, с которыми можно удобно поработать, то это одна ситуация. Если вдруг эти данные находятся прямо в TTreeView и туда попадают, например, через запрос к базе, то все сложнее. В любом случае, задача, имхо, нетривиальна. Просто так поставить галочку и получить результат не получится, потому что то, что вы сейчас видите является последствием того, что сортировка осуществляется путем сравнения строк (если точнее, то символов строки), а не чисел.
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
20.02.2018, 11:23 [ТС] | 3 |
Nanotentacle,
именно так и происходит.
Добавлено через 5 минут я так понимаю, что нужно использовать функцию AnsiCompareStr?
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
20.02.2018, 11:38 | 4 |
Нет, это не приведет совершенно ни к чему. Потому как для системы переменная типа integer = 10 и строковая переменная '10' - это вообще разные вещи. Сравнение строк для сортировки происходит посимвольно. Поэтому как строку ни сравнивай, толку не будет.
Чтобы справиться с проблемой с наименьшими проблемами мне было бы интересно узнать, если ли какая-то переменная в базе данных, которая бы отделяла болты от резисторов? Если есть, то можно попробовать написать свой собственный сортировщик для всего этого дела. Если нету - то тут опять, все сложно, но решаемо.
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
20.02.2018, 11:47 [ТС] | 5 |
в базе нет такой переменной
Добавлено через 3 минуты единственное, что для каждой записи в бд поле с записью, например, С5-35В-50-36 Ом± 5 %, уникально.
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
20.02.2018, 11:57 | 6 |
Тогда пришлите две вещи: структуру таблицы, где хранятся данные по товарам (это же товары?) и пришлите код процедуры, где происходит загрузка данных из БД в TreeView.
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
||||||
20.02.2018, 12:02 [ТС] | 7 | |||||
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
20.02.2018, 15:43 | 8 |
Судя по тому, что я вижу, происходит следующее: имя в TreeView состоит из трех частей - "Продукт", "Название", "Марка". Продукт и название, имхо, нас не сильно беспокоит. Там навряд ли будут какие-то уникальные данные, по которым мы сможем сортировать (я, конечно, могу ошибаться, так как информация все же усеченная).
Предлагаю разбить приведенную процедуру на следующие процедуры: - импорт данных из базы в массив данных, элементами которого будут записи, содержащие продукт, название, марку, данные из столбца Prd, Symbol и Type; - сортировка массива (тут несколько вариантов сортировки). Данные, содержащиеся в марке, достаточно типизированы, имхо, и вытащить оттуда Омы или диаметр болта вполне возможно. - публикация отсортированного списка в TTreeView с отключенной сортировкой. В целом, я готов помочь в этом деле. Вопрос в том, что вам тоже придется над этим поработать, так как у меня нет, например, базы, и я не могу сориентироваться над всеми возможными вариантами "вычленения" чисел для сортировки.
0
|
20.02.2018, 15:48 | 9 |
tsareva,
я бы посоветовал делить каждую строку на сущности - признаком деления выступает символ "-" (тире) и пробел и далее сравнивать эти сущности. Плюс надо учесть тип для каждый этой сущности, т.к. сортировка строки и числа происходит по разным правилам
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
20.02.2018, 15:55 [ТС] | 10 |
была бы очень благодарна.
меня это совершенно не расстраивает, хочу во всем разобраться Добавлено через 5 минут так и есть, уникальные данные относятся только к полю mark
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
20.02.2018, 16:13 [ТС] | 12 |
боюсь, что в бд не получится, потому что набор свойств, как Вы заметили,
. и каждый кусочек данных из бд попадает в свой узел в treeview. в данном случае, думаю, стоит сортировать именно каждый этот узел (кусочек бд) дерева при его заполнении.
Добавлено через 2 минуты думаю, что не стоит разбивать таблицу на несколько. это усложнит алгоритм сортировки.
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
20.02.2018, 16:21 | 13 |
ну давайте приступим. Для начала проведите анализ.
Разбивать строку на параметры можно по символу тире. Значимое для сортировки значение находится после второго знака тире, например. Также, судя по тому, что я вижу в коде, параметр в столбце Symbol может иметь четыре значения - 0, 1, 2 и "остальное". Задача для вас: надо убедиться, что все строки, у которых одинаковый Symbol, имеют значимое для сортировки значение после одного и того же знака тире (в смысле его порядкового номера). Объяснить вышло запутанно, надеюсь, понять меня получится. Жду результатов.
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
20.02.2018, 16:29 [ТС] | 14 |
еще, как мне кажется, поля Prd и Symbol можно не использовать при сортировке, потому что первое отвечает за последовательность атрибутов в записи (Наименование ГОСТ обозначение ИЛИ Наименование Обозначение ГОСТ), а второй отвечает за установку символа "тире" между ГОСТ и обозначением. Думаю, что в данном случае нужно обратить внимание только на поле mark, потому что именно по нему будет сортироваться запись.
Добавлено через 1 минуту поле mark - это и есть обозначение
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
20.02.2018, 17:06 | 15 |
Это понятно. Но посмотрим теперь на скрины из первого поста. В случае резисторов те самые омы находятся после второго знака тире. Смотрим на следующий скрин - там диаметр болта находится после первого знака тире. Надо как-то определять положение нужных значений относительно знака тире. Я подозреваю, что поле Symbol вполне может помочь, но так как у меня нет БД, могу только предполагать.
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
20.02.2018, 18:37 [ТС] | 16 |
нет, я могу Вам точно сказать, что в данном случае поле Symbol не участвует в формировании записи поля mark вообще. это разделитель между словами, но не между значениями mark. поле mark - это цельная запись, больше с никакими другими полями оно не связано.
0
|
20.02.2018, 21:30 | 17 | |||||||||||||||
вам тут объясняли
на sql.ru объясняли, а вы опять со своей сортировкой сортировать нужно не в дереве, а раньше, запросом в БД или после запроса в памяти для сортировки запросом нужно разделить вашу строку на подстроки что бы получилось
для сортировки в памяти нужно создать класс или record с нужными полями как в запроса
0
|
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
|
|
21.02.2018, 07:59 | 18 |
А я разве говорил, что Symbol участвует в формировании записи? Symbol нам может подсказать, с какой записью мы имеем дело. Ту же функцию может выполнить поле Name. Нам от чего-то же надо оттолкнуться, чтобы нормально сортировать? И я уже писал выше, что отталкиваться просто от строки не получится (вернее, получится, но это будет тот еще костыль. Мы и так костыли всякие придумываем, но это будет вообще костыльный костыль). Поэтому задача стоит не в том, чтобы найти какие параметры не участвуют в формировании, а исходя из какого столбца в вашей БД будет просматриваться закономерность, исходя из которой будем парсить марку.
0
|
0 / 0 / 0
Регистрация: 22.12.2017
Сообщений: 218
|
|
21.02.2018, 08:17 [ТС] | 19 |
понятно.
то есть мне сейчас надо разобраться с этим полем.
Добавлено через 6 минут дело в том, что в бд записи имеют различные свойства по своему содержанию. есть МДМ160-1Е60ВП, и С2-33-0,25-150 Ом ± 10 %-Г- В, и 1206-X7R-100В-0,47 мкФ± 10 %. Поэтому сортировать по какому-то параметру невозможно.
0
|
21.02.2018, 08:47 | 20 |
вот у вас уже болты, резисторы. а если добавятся емкости, светодиоды, кабель и пр?
вы будете на каждый товар держать отдельную таблицу?? а движение товара как делать? ID из каждой таблицы брать??? еще раз предлагаю ознакомиться с моделью EAV. Сущность. Атрибут. Значение атрибута. тогда будет справочник сущностей, справочник свойств, таблица значений Болт | Размер | 10 Резистор | Сопротивление | 1000
0
|
21.02.2018, 08:47 | |
21.02.2018, 08:47 | |
Помогаю со студенческими работами здесь
20
Нестандартная сортировка Нестандартная сортировка массива Нестандартная сортировка ArrayList Нестандартная сортировка строк Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |