powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TVirtualStringTree и данные
30 сообщений из 30, показаны все 2 страниц
TVirtualStringTree и данные
    #39780068
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впервые пытаюсь использовать VirtualStringTree, возник вопрос: в руководстве, которое есть в справке и в статьях, которые нашел в интернете, обычно объявляют запись или класс, в котором хранятся данные каждого узла, и присваивают узлам эти данные при создании дерева. А можно ли не делать так, а отображать посторонние данные. Например я планирую два типа узлов:
- заказ, с некоторыми характеристиками
- элементы заказа со своими характеристиками (название изделия, количество и т.д.).
То есть для узлов получаются заметно отличающиеся структуры данных.
Данные хранятся и пишутся в БД. Вот выбрать данные из БД, распихать их по узлам, а потом при изменении назад из узлов писать в БД, не лишняя ли это работа? Правда, если отображать данные напрямую из БД, то желателен видимо датасет с местным кешем и с двусторонним движением по записям, т.к. при перерисовке будут запрашиваться разные данные. И может будут постоянные запросы к БД все-таки.
Собственно вопрос, кто-нибудь делал или сталкивался с тем, чтобы отображать в компоненте не данные, которые присвоены к записям/объектам, соответствующим узлам, а какие-то данные хранящиеся не в дереве?
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780077
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

Загружать данные нужно только при OnExpanded, а никакой проблемы хранить в разных нодах объекты разных классов - нет.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780084
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovs62,

Загружать данные нужно только при OnExpanded, а никакой проблемы хранить в разных нодах объекты разных классов - нет.Ну да, точно, размер же, который надо указать, будет 4 байта для любого объекта.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780134
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Собственно вопрос, кто-нибудь делал или сталкивался с тем, чтобы отображать в компоненте не данные, которые присвоены к записям/объектам, соответствующим узлам, а какие-то данные хранящиеся не в дереве?
непонятно, что ты хочешь. Сама концепция VST заключается в заполнении и временном хранении сторонних данных, причем удаление/добавление/изменений данных происходит вручную. Если ты собираешься работать с БД, в любом случае тебе придется использовать кэшированный датасет. При изменении содержимого датасета ты можешь либо добавлять новую порцию данных в VST, либо полностью его перерисовывать.
Упомянутое выше событие OnExpanded - это всего лишь частный случай добавления данных в дерево.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780136
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докнепонятно, что ты хочешь.
Я хочу отображать имеющиеся данные определенным образом, VST такой способ отображения позволяет осуществить, как я понимаю.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780137
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov, Док,
спасибо за ответы. Еще подумаю. ) Наверное так и придется сделать - "хранить в разных нодах объекты разных классов".
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780138
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Докнепонятно, что ты хочешь.
Я хочу отображать имеющиеся данные определенным образом, VST такой способ отображения позволяет осуществить, как я понимаю.

VST позволяет отображать данные практически любым образом
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780142
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Я хочу отображать имеющиеся данные определенным образом, VST такой способ отображения позволяет осуществить, как я понимаю.
VST позволяет отображать данные, засунутые туда даже самым проктостоматологическим способом

из ранних опытов
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780147
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62То есть для узлов получаются заметно отличающиеся структуры данных.
Нет.

У VST один набор столбцов для всех узлов, независимо от типа узла.
И заголовок для всех улов один.

Есть варианты решений.

Например, в одном или нескольких столбцах отображать примерно одинаковые по смыслу данные.
В картинке ниже такой общий столбец - "название".
В дереве 4 вида узлов : корневой (надпись "Пользователи"), пользователь (надпись BASOVAAV(Басов Алла Владимировна)), папки (желтые "папки" с зелеными крестиками) и документы. У документа - множество полей, они отображаются только для узлов с документами.

Еще вариант: (будет с след.сообщении).
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780148
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

еще вариант. У узлов много разных полей.
Решение. Одновременно показываем поля с одинаковым названием, остальные поля показываем при переключении фокуса на данный узел.
Пример: отображение структуры Округа Москвы -> Улицы -> Документы.
В Москве есть округа: Восточный, Западный, Северный... В каждом округе - свой список улиц. Для выполнения ремонта по каждой улице составляются документы.

В картинке ниже курсор находится на узле "Округ". Соответственно, отображаются только свойства узлов типа "Округ", а также общие данные для узлов всех типов - в самом левом столбце:
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780149
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переводим курсор на узел типа "Улица". Состав столбцов поменялся, теперь он соответствует набору полей узла "Улица".
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780150
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переводим курсор на узел типа "Документа". Состав столбцов снова, теперь он соответствует набору полей узла "Документ".
Так как набор полей для каждого типа может быть очень велик, они все не помещаются при отображении дерева. Поэтому набор полей текущего узла отображается справа, вертикально, по типу редактора свойств Delphi.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780151
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все это - дьявольски неудобно кодить, и я не вполне уверен, что эти удобно пользоваться.

Поэтому я предлагаю вместо VST использовать TcxGrid. Там допускаются показ разнотипных сущностей ОДНОВРЕМЕННО, для каждого уровня - свой набор полей и свои заголовки:


Или TDBGeridEh:

...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780152
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

Еще вариант.
Все данные всех узлов отображаются одновременно, каждый - со своим набором полей. В заголовке отображаются только поля, которые есть у текущей записи.
Пример: выбрана запись №24:
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780153
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а теперь выбрана запись №17, видно, что структура заголовка изменилась:
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780154
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже решение "так себе", зато не требуется отдельного места под отдельный заголовок для каждого типа записи.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780159
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра,
Фэйтл ЭраНет.

У VST один набор столбцов для всех узлов, независимо от типа узла.Ну так столбцы одинаковые, а данные всё равно разные у узлов разных уровней.

Я предполагал примерно так, как на картинке в первом сообщении, только 2 уровня узлов. Как по мне, лучше всего для моей ситуации - то, что с TcxGrid. Но это ведь, как я понимаю, платный компонент. Так что наверное надо разбираться с VST.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780162
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Но это ведь, как я понимаю, платный компонент. Так что наверное надо разбираться с VST.
Если ты собираешься зарабатывать на софте - нужно использовать качественные готовые компоненты.
Времена, когда TVirtualTreeView был хорош и эксклюзивен - прошли. Хорош он был не своей бесплатностью, а возможностью кастомизации и хорошей скростью.

Теперь, например, есть отличный TcxTreeList. Это деревце имеет уже встроенные контролы для редактирования и возможность группировки столбов в бэнды, и есть стандартный способ запитать его от специального кастомного источника данных, view's в TcxGrid.

Хотя бы варезные DevExpress попробуй, для оценки. Потом купишь, если понравится. Или продемонстрируешь руководству возможности, что тебе купили.

А TVirtualTreeView - будешь пилить долго. Местные хвастуны тут часто показывают, что они с ним сделали, "за годы". Всё (без исключения) - жалкое подобие по сравнению с базовыми возможностями TcxTreeList.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780252
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Я хочу отображать имеющиеся данные определенным образом

не используй VirtualStringTree (сделанного ИМЕННО для того, чтобы тебе самому не надо было ничего рисовать)

используй его предка VirtualDrawTree и рисуй всё что надо
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780256
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме цены "девки" хороши неимоверной навороченностью кода, если что-то пойдёт не так - то без саппорт ни хрена не разберешься. в 4-х девках еще можно было самому разбираться, в 6-х уже труба.

нет, если на кастомизацию девок потратить те же "за годы", как на кастомизацию VTV, тогда да, но тогда зачем?

в том же их гриде понадобилось мне сделать пользовательскую сортировку сразу по нескольким столбцам, чтобы у одних столбцов можно было направление разворачивать, а у других - только Ascending или unsorted

казалось бы - та самая "базовая возможность", только с небольшим ограничением.

ответ "девок" - напишите вашу собственную сортировку грида, полностью, вместо базовой. Возьмите ((список методов)), скопипастьте в вашу форму (в каждую, где надо) и вставьте туда ваши ограничения.

охренеть кастомизация, блджад.

пришлось патч делать, чтобы параметры сортировки из метода в метод гонялись не через широкие (т.е. хрен расширишь, без переписывания кода, про скорость молчу - на неё "девки" давно забили) списки параметров, а через record (указатель). И соотв. был у грида ивент по исправлению режима сортировки перед началом сортировки.

и да, VTV я тоже когда-то патчил, и это было гораздо проще. Причем VTV пришлось патчить не для ограничения/настройки "базовой функции", а для добавления новой.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780297
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраs62Но это ведь, как я понимаю, платный компонент. Так что наверное надо разбираться с VST.
Если ты собираешься зарабатывать на софте - нужно использовать качественные готовые компоненты.
Времена, когда TVirtualTreeView был хорош и эксклюзивен - прошли. Хорош он был не своей бесплатностью, а возможностью кастомизации и хорошей скростью.
...
Нет, это не для заработка (продаж), это в программе учета, которая уже сколько-то лет работает в нашей компании (небольшой), пытаюсь добавить еще один блок. Там есть и организационные моменты, как обычно, и разное. Пока что не вижу места, кроме вот одного, чтобы применить этот компонент. Так что $800 мне скорей всего никто не даст, да и для использования в одном месте не факт, что это оправданная затрата. Пиратским софтом я принципиально не пользуюсь, кроме случаев, когда обстоятельства (по работе) сильно подталкивают. Хватает бесплатного и купленного.
Но да, хотя я таким и не занимался, но согласен, что если регулярно писать софт на продажу, то имеет смысл использовать хорошие платные компоненты, если есть в них нужда.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780307
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,
>>>хотя я таким и не занимался
Нет, был период, когда более-менее регулярно клиенты компании заказывали софт для наших изделий.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780411
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраВсё (без исключения) - жалкое подобие по сравнению с базовыми возможностями TcxTreeList.
да-да-да, наемный водитель Майбаха сейчас всех будет убеждать покупать машины только этого класса
Ariochнет, если на кастомизацию девок потратить те же "за годы", как на кастомизацию VTV, тогда да, но тогда зачем?
+1
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780517
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Пока что не вижу места, кроме вот одного, чтобы применить этот компонент.
Да хотя бы редакторы девекспресовские использовать для редактирования данных в твоем vtv, вместо "стандартных". :)
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780659
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Ну так столбцы одинаковые, а данные всё равно разные у узлов разных уровней.
Ну мог бы ты нарисовать, как должно выглядеть?
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780676
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я с VST тоже всякого понаделал. Практика показывает, что размещение разнородных данных в одном представлении в большинстве случаев неудобна для пользования. И при кодировании тоже нужно постараться не нагородить.

Сейчас в твоём случае я бы сделал так:
а) sql (или вью), которая соединяет две таблицы и отдаёт результат в простом табличном виде. Конечно тут нужны столбцы типа ID, PID - для построения дерева, также что-то типа table_name/object_type - признак типа сущности и object_id - id сущности
б) результат запроса показать в виде дерева не должно составить труда. мэппинг полей разных датасетов в ограниченный набор столбцов кодить не не надо - это всё в (а)
в) при редактировании - или хранимки, или sql по базовой таблице. ну или в редких случаях можно использовать триггеры на вью в БД.

В итоге это будет проще и реализовать, и поддерживать в будущем.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39780893
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну вот это в принципе вполне удобоваримо. Особенно, если легко перекрыть и вместо таблички свою форму-редактор вставлять (не знаю, не пробовал ehGrid).

Фэйтл ЭраИли TDBGridEh:



а вот это, конечно, ужас, когда таблица разорвана и столбцы надо деревянной линейкой прослеживать через вставку

Фэйтл Эраа теперь выбрана запись №17, видно, что структура заголовка изменилась:

...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39781031
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраs62Ну так столбцы одинаковые, а данные всё равно разные у узлов разных уровней.
Ну мог бы ты нарисовать, как должно выглядеть?Я в принципе уяснил что-то, о чем спрашивал, хотя напрямую, вроде, ответа на свой заданный вопрос не получил, но, скажем так, получил косвенно.
Вряд ли стоит сейчас обсуждать здесь детали. Вид представления ведь зависит то отображаемых сущностей (объектов в широком смысле, а не в смысле ООП), от того, для чего это нужно и что с этим будут делать, как этим будут манипулировать пользователи, причем разные пользователи по-разному. Я написал в предыдущем каком-то сообщении, что нужно примерно то, что у тебя на картинке 1, но только с узлами 2 уровней, а не 4 или же то, что на картинке с TcxGrid. А сейчас начнешь рассказывать подробней, так еще надают советов по разным темам программирования, проектирования и другим сферам жизнедеятельности.
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39781258
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
Не, ну вот это в принципе вполне удобоваримо. Особенно, если легко перекрыть и вместо таблички свою форму-редактор вставлять (не знаю, не пробовал ehGrid).

Фэйтл ЭраИли TDBGridEh:



а вот это, конечно, ужас, когда таблица разорвана и столбцы надо деревянной линейкой прослеживать через вставку

Фэйтл Эраа теперь выбрана запись №17, видно, что структура заголовка изменилась:


Со многих точек зрения как бы и да. Но второй вариант для юзеров оказался в итоге более предпочтительным.
На первое место они поставили возможность размещения большего объема полезной информации, которую бы съедали хэдеры на каждом уровне. Дело в том, что структуру данного документа они хорошо знают еще задолго до начала работы с софтом, поэтому на хэдер они и не смотрят.
То есть, как всегда: "детали - важны".
...
Рейтинг: 0 / 0
TVirtualStringTree и данные
    #39782699
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраА TVirtualTreeView - будешь пилить долго. Местные хвастуны тут часто показывают, что они с ним сделали, "за годы".

Я тут вдруг подумал, что если в VST перевести в Report-mode и отключить рисование "черточек" и крестиков и немного допилить, то ведь это же готовый TdxNavBar !
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TVirtualStringTree и данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]