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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Нет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Или TDBGeridEh:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ну мог бы ты нарисовать, как должно выглядеть?
28 фев 19, 21:46    [21822241]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить