Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
Впервые пытаюсь использовать VirtualStringTree, возник вопрос: в руководстве, которое есть в справке и в статьях, которые нашел в интернете, обычно объявляют запись или класс, в котором хранятся данные каждого узла, и присваивают узлам эти данные при создании дерева. А можно ли не делать так, а отображать посторонние данные. Например я планирую два типа узлов:
- заказ, с некоторыми характеристиками
- элементы заказа со своими характеристиками (название изделия, количество и т.д.).
То есть для узлов получаются заметно отличающиеся структуры данных.
Данные хранятся и пишутся в БД. Вот выбрать данные из БД, распихать их по узлам, а потом при изменении назад из узлов писать в БД, не лишняя ли это работа? Правда, если отображать данные напрямую из БД, то желателен видимо датасет с местным кешем и с двусторонним движением по записям, т.к. при перерисовке будут запрашиваться разные данные. И может будут постоянные запросы к БД все-таки.
Собственно вопрос, кто-нибудь делал или сталкивался с тем, чтобы отображать в компоненте не данные, которые присвоены к записям/объектам, соответствующим узлам, а какие-то данные хранящиеся не в дереве?
27 фев 19, 19:39    [21821059]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
asviridenkov
Member

Откуда:
Сообщений: 3899
s62,

Загружать данные нужно только при OnExpanded, а никакой проблемы хранить в разных нодах объекты разных классов - нет.
27 фев 19, 19:49    [21821074]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
asviridenkov
s62,

Загружать данные нужно только при OnExpanded, а никакой проблемы хранить в разных нодах объекты разных классов - нет.
Ну да, точно, размер же, который надо указать, будет 4 байта для любого объекта.
27 фев 19, 19:56    [21821083]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Док
Member

Откуда: Казань
Сообщений: 6131
s62
Собственно вопрос, кто-нибудь делал или сталкивался с тем, чтобы отображать в компоненте не данные, которые присвоены к записям/объектам, соответствующим узлам, а какие-то данные хранящиеся не в дереве?

непонятно, что ты хочешь. Сама концепция VST заключается в заполнении и временном хранении сторонних данных, причем удаление/добавление/изменений данных происходит вручную. Если ты собираешься работать с БД, в любом случае тебе придется использовать кэшированный датасет. При изменении содержимого датасета ты можешь либо добавлять новую порцию данных в VST, либо полностью его перерисовывать.
Упомянутое выше событие OnExpanded - это всего лишь частный случай добавления данных в дерево.
27 фев 19, 22:53    [21821185]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
Док
непонятно, что ты хочешь.

Я хочу отображать имеющиеся данные определенным образом, VST такой способ отображения позволяет осуществить, как я понимаю.
27 фев 19, 23:28    [21821202]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
asviridenkov, Док,
спасибо за ответы. Еще подумаю. ) Наверное так и придется сделать - "хранить в разных нодах объекты разных классов".
27 фев 19, 23:31    [21821208]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
asviridenkov
Member

Откуда:
Сообщений: 3899
s62
Док
непонятно, что ты хочешь.

Я хочу отображать имеющиеся данные определенным образом, VST такой способ отображения позволяет осуществить, как я понимаю.


VST позволяет отображать данные практически любым образом
27 фев 19, 23:43    [21821219]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Док
Member

Откуда: Казань
Сообщений: 6131
s62
Я хочу отображать имеющиеся данные определенным образом, VST такой способ отображения позволяет осуществить, как я понимаю.

VST позволяет отображать данные, засунутые туда даже самым проктостоматологическим способом Картинка с другого сайта.
+ из ранних опытов
Картинка с другого сайта.
28 фев 19, 00:26    [21821250]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
s62
То есть для узлов получаются заметно отличающиеся структуры данных.

Нет.

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

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

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

Еще вариант: (будет с след.сообщении).

К сообщению приложен файл. Размер - 29Kb
28 фев 19, 00:55    [21821270]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
s62,

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

В картинке ниже курсор находится на узле "Округ". Соответственно, отображаются только свойства узлов типа "Округ", а также общие данные для узлов всех типов - в самом левом столбце:

К сообщению приложен файл. Размер - 26Kb
28 фев 19, 01:03    [21821273]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Переводим курсор на узел типа "Улица". Состав столбцов поменялся, теперь он соответствует набору полей узла "Улица".

К сообщению приложен файл. Размер - 22Kb
28 фев 19, 01:05    [21821274]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Переводим курсор на узел типа "Документа". Состав столбцов снова, теперь он соответствует набору полей узла "Документ".
Так как набор полей для каждого типа может быть очень велик, они все не помещаются при отображении дерева. Поэтому набор полей текущего узла отображается справа, вертикально, по типу редактора свойств Delphi.

К сообщению приложен файл. Размер - 59Kb
28 фев 19, 01:09    [21821275]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Все это - дьявольски неудобно кодить, и я не вполне уверен, что эти удобно пользоваться.

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

Или TDBGeridEh:

Картинка с другого сайта.
28 фев 19, 01:15    [21821279]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
s62,

Еще вариант.
Все данные всех узлов отображаются одновременно, каждый - со своим набором полей. В заголовке отображаются только поля, которые есть у текущей записи.
Пример: выбрана запись №24:

К сообщению приложен файл. Размер - 36Kb
28 фев 19, 01:37    [21821285]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
а теперь выбрана запись №17, видно, что структура заголовка изменилась:

К сообщению приложен файл. Размер - 36Kb
28 фев 19, 01:39    [21821286]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Тоже решение "так себе", зато не требуется отдельного места под отдельный заголовок для каждого типа записи.
28 фев 19, 01:41    [21821287]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
Фэйтл Эра,
Фэйтл Эра
Нет.

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

Я предполагал примерно так, как на картинке в первом сообщении, только 2 уровня узлов. Как по мне, лучше всего для моей ситуации - то, что с TcxGrid. Но это ведь, как я понимаю, платный компонент. Так что наверное надо разбираться с VST.
28 фев 19, 03:39    [21821298]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
s62
Но это ведь, как я понимаю, платный компонент. Так что наверное надо разбираться с VST.

Если ты собираешься зарабатывать на софте - нужно использовать качественные готовые компоненты.
Времена, когда TVirtualTreeView был хорош и эксклюзивен - прошли. Хорош он был не своей бесплатностью, а возможностью кастомизации и хорошей скростью.

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

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

А TVirtualTreeView - будешь пилить долго. Местные хвастуны тут часто показывают, что они с ним сделали, "за годы". Всё (без исключения) - жалкое подобие по сравнению с базовыми возможностями TcxTreeList.
28 фев 19, 04:24    [21821306]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Arioch
Member

Откуда:
Сообщений: 10807
s62
Я хочу отображать имеющиеся данные определенным образом


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

используй его предка VirtualDrawTree и рисуй всё что надо
28 фев 19, 11:20    [21821503]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Arioch
Member

Откуда:
Сообщений: 10807
кроме цены "девки" хороши неимоверной навороченностью кода, если что-то пойдёт не так - то без саппорт ни хрена не разберешься. в 4-х девках еще можно было самому разбираться, в 6-х уже труба.

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

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

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

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

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

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

и да, VTV я тоже когда-то патчил, и это было гораздо проще. Причем VTV пришлось патчить не для ограничения/настройки "базовой функции", а для добавления новой.
28 фев 19, 11:28    [21821512]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
Фэйтл Эра
s62
Но это ведь, как я понимаю, платный компонент. Так что наверное надо разбираться с VST.

Если ты собираешься зарабатывать на софте - нужно использовать качественные готовые компоненты.
Времена, когда TVirtualTreeView был хорош и эксклюзивен - прошли. Хорош он был не своей бесплатностью, а возможностью кастомизации и хорошей скростью.
...

Нет, это не для заработка (продаж), это в программе учета, которая уже сколько-то лет работает в нашей компании (небольшой), пытаюсь добавить еще один блок. Там есть и организационные моменты, как обычно, и разное. Пока что не вижу места, кроме вот одного, чтобы применить этот компонент. Так что $800 мне скорей всего никто не даст, да и для использования в одном месте не факт, что это оправданная затрата. Пиратским софтом я принципиально не пользуюсь, кроме случаев, когда обстоятельства (по работе) сильно подталкивают. Хватает бесплатного и купленного.
Но да, хотя я таким и не занимался, но согласен, что если регулярно писать софт на продажу, то имеет смысл использовать хорошие платные компоненты, если есть в них нужда.
28 фев 19, 12:35    [21821610]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
s62,
>>>хотя я таким и не занимался
Нет, был период, когда более-менее регулярно клиенты компании заказывали софт для наших изделий.
28 фев 19, 12:42    [21821628]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Док
Member

Откуда: Казань
Сообщений: 6131
Фэйтл Эра
Всё (без исключения) - жалкое подобие по сравнению с базовыми возможностями TcxTreeList.

да-да-да, наемный водитель Майбаха сейчас всех будет убеждать покупать машины только этого класса
Arioch
нет, если на кастомизацию девок потратить те же "за годы", как на кастомизацию VTV, тогда да, но тогда зачем?

+1
28 фев 19, 14:36    [21821797]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
s62
Пока что не вижу места, кроме вот одного, чтобы применить этот компонент.

Да хотя бы редакторы девекспресовские использовать для редактирования данных в твоем vtv, вместо "стандартных". :)
28 фев 19, 17:03    [21821986]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
s62
Ну так столбцы одинаковые, а данные всё равно разные у узлов разных уровней.

Ну мог бы ты нарисовать, как должно выглядеть?
28 фев 19, 21:46    [21822241]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
delphinotes
Member

Откуда: Санкт-Петербург
Сообщений: 317
Я с VST тоже всякого понаделал. Практика показывает, что размещение разнородных данных в одном представлении в большинстве случаев неудобна для пользования. И при кодировании тоже нужно постараться не нагородить.

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

В итоге это будет проще и реализовать, и поддерживать в будущем.
28 фев 19, 22:48    [21822268]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Не, ну вот это в принципе вполне удобоваримо. Особенно, если легко перекрыть и вместо таблички свою форму-редактор вставлять (не знаю, не пробовал ehGrid).

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

Картинка с другого сайта.


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

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

Картинка с другого сайта.
1 мар 19, 11:57    [21822567]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
s62
Member

Откуда: Жуковский
Сообщений: 916
Фэйтл Эра
s62
Ну так столбцы одинаковые, а данные всё равно разные у узлов разных уровней.

Ну мог бы ты нарисовать, как должно выглядеть?
Я в принципе уяснил что-то, о чем спрашивал, хотя напрямую, вроде, ответа на свой заданный вопрос не получил, но, скажем так, получил косвенно.
Вряд ли стоит сейчас обсуждать здесь детали. Вид представления ведь зависит то отображаемых сущностей (объектов в широком смысле, а не в смысле ООП), от того, для чего это нужно и что с этим будут делать, как этим будут манипулировать пользователи, причем разные пользователи по-разному. Я написал в предыдущем каком-то сообщении, что нужно примерно то, что у тебя на картинке 1, но только с узлами 2 уровней, а не 4 или же то, что на картинке с TcxGrid. А сейчас начнешь рассказывать подробней, так еще надают советов по разным темам программирования, проектирования и другим сферам жизнедеятельности. Картинка с другого сайта.
1 мар 19, 14:27    [21822748]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Arioch
+
Не, ну вот это в принципе вполне удобоваримо. Особенно, если легко перекрыть и вместо таблички свою форму-редактор вставлять (не знаю, не пробовал ehGrid).

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

Картинка с другого сайта.


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

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

Картинка с другого сайта.

Со многих точек зрения как бы и да. Но второй вариант для юзеров оказался в итоге более предпочтительным.
На первое место они поставили возможность размещения большего объема полезной информации, которую бы съедали хэдеры на каждом уровне. Дело в том, что структуру данного документа они хорошо знают еще задолго до начала работы с софтом, поэтому на хэдер они и не смотрят.
То есть, как всегда: "детали - важны".
1 мар 19, 21:47    [21823131]     Ответить | Цитировать Сообщить модератору
 Re: TVirtualStringTree и данные  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Фэйтл Эра
А TVirtualTreeView - будешь пилить долго. Местные хвастуны тут часто показывают, что они с ним сделали, "за годы".


Я тут вдруг подумал, что если в VST перевести в Report-mode и отключить рисование "черточек" и крестиков и немного допилить, то ведь это же готовый TdxNavBar !

5 мар 19, 19:48    [21825725]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить