Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TreeView c БД (master-detail-detail-detail-...) [D5, DBISAM]


Darker ©   (2002-05-14 16:15:00) 

Могу конечно сделать и Parent-Child но придется мастырить
Query? и еще много чего...
Во многих компонентах нет возможности вкладывать
в одну строчку значения нескольких полей.
Нууу... типа:

[иконка]|[data][Name][Day].....
|
|--->[Name2]|[Text1]...
| |
| |--->[field1][field2]...
|
|--->[Name2][Text1]...
|
[иконка]|[data][Name][Day].....
...

HELP!!! Пожалуйста кто может помочь, откликнитесь.


Кулюкин Олег   (2002-05-28 09:16:00) [1]

2 Darker © (14.05.02 16:15)
Если правильно понял, Вам нужен иерархический грид как в Outlook Express для конференций?
Готового бесплатного компонента я не нашел, поэтому сначала написал такой на основе DrawGrid, а потом на основе TTreeView.
Все отрисовывается ручками.
Пример ручной отрисовки дерева в папке Demo\CustomDraw.
Работы там на один-два дня.
Удачи!


Flipper_   (2002-05-28 06:52:00) [2]

Для Root - "select id,name from s_Types", и заполняешь Root

При раскрытии ноды - Format("select id,name,data1,data2 from s_SubTupes where type=%d",[Integer(tv1.Selected.Data)]);

И так далее. Давно уже так делаю, т.к. все деревья с доступом к БД что я видел - были жутко тормозные и неудобные - нужна какая-нибудь мелочь, типа отображения двух полей сразу, и ничего не сделаешь..

А еще - усиленно рекомендую всем работающим с деревьями TVirtualTree by Micke Lischke. Ручками чуть больше надо поработать, но и результат отличный. И оно БЫСТРЕЕ стандартного.


vchris   (2002-05-16 14:43:00) [3]

Я делал это следующим образом. К таблице с данными добавляется таблица описывающая положение узла в TreeView с полями Id (уникальное общее с табл. данных),Level(думаю это понятно),ParentIndex, Index (соответствует свойству .Item.Index), HasChildren. Основная трудность прописать процедуры удаления узлов и drag-drop. Узел содержит объект свойства которого совокупность полей записи нескольких подчиненных таблиц.


Darker   (2002-05-16 14:28:00) [4]

>Rothman (16.05.02 12:26)
Сенькс.
Да в QuantumGrid есть похожее, но мне пришлось все данные
загонять в один "Запрос" и далее в "гриде" делать группировку
т.о. это выглядит как "TreeGrid" :)


Rothman   (2002-05-16 12:26:00) [5]

Готовое решение в библиотеке FirstClass ( http://www.woll2woll.com) - многоколоночное дерево с мастер-деталь-деталь... по веткам, но пакет коммерческий. Ключ я думаю сам найдеш :)
Хорошее решение ElTreeLite ( http://www.eldos.org) - тоже многоколоночное дерево с большими возможностями с огромным количеством настроек и событий, но привязывать его к датасету придется самому. FreeWare c исходниками.
Вроде бы есть решение в QuantumGrid, но не уверен. Тоже коммерческий пакет.


Lusha   (2002-05-16 11:55:00) [6]

>Darker © (16.05.02 11:39)
Дык я же говорю что у меня Master-Detail-Detail т.е. много вложенности, а это можно организовать если будет Parent-Child.
У меня несколько таблиц, а не одна.


Вложенность значения не имеет. Количество таблиц тоже... Слева то дерево...


Darker   (2002-05-16 11:39:00) [7]

>>>Lusha © (16.05.02 10:07)
>Правильно... В дереве одно... А справа - все остальные. Идея >ясна?

Дык я же говорю что у меня Master-Detail-Detail т.е. много вложенности, а это можно организовать если будет Parent-Child.
У меня несколько таблиц, а не одна.

>Что Вы зациклились на своем LOTUS"е?
Это не я... это клиент. Так ему ну очччень хочется :0)

>>>dimis (16.05.02 09:29)
А примера у Вас нет? Буду очень рад если на мыло его скините.


Lusha   (2002-05-16 10:52:00) [8]

Sorry, разумеется TTreeNode.Data...


Lusha   (2002-05-16 10:47:00) [9]

>dimis (16.05.02 10:39)
в любом случае если нужно отображать дерево из бызы данных нужно или самому писать его заполнение или использовать сторонии компоненнты
Полностью с Вами согласен...

но нормальных бесплатных я не нашел(может кто знает подскажите)
TvgDBTreeView из VGLib

Хотя я предпочитаю писать сам... Идея проста - на TTreeItem.Data вешается TBookmarkStr для связи с таблицей и все дела...


dimis   (2002-05-16 10:39:00) [10]

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


Lusha   (2002-05-16 10:07:00) [11]

>dimis (16.05.02 09:29)
Прежде чем что либо изображать в коде, необходимо, на мой взгляд, решить, а что, собственно, нужно изобразить... Вот этим, решением вопроса о внешнем виде, мы пока и занимаемся... :)


dimis   (2002-05-16 09:29:00) [12]

Люди переходите на ООП. Все делается очень просто
Tobj_type=(type1,type2,type3....);
TmyNode=class
ide:integer;
obj:Tobj_type;
.....
constructor create(Aide:integer;AObj:TObj_type..);
end;

этот класс определяется как кому надо. Смотря какие поля нужно хранить

constructor TmyNode.Create(Aide:integer;AObj:TObj_type....)
begin
ide:=aide;
obj:=Aobj;
end;

а теперь самое основное.Добавляем Node в дерево

var
n:TTreeNode;
begin
n:=TreeView1.Items.AddObject(nil," текст",TmyNode.Create(....));
end;
Вот в принципе все. на элементе дерева висит объект с полями нужными(их может быть много);
Считывание происходит следующим образом

TmyNode(TreeView1.Selexted.Data).ide
TmyNode(TreeView1.Selexted.Data).obj

Поле TmyNode.obj советую оставить в нем можно хранить тип объекта и что при клике на него делать.
Возможны дальнейшие консультации


Lusha   (2002-05-16 09:08:00) [13]

>Darker © (16.05.02 07:17)
Да-а-а, батенька...
Что Вы зациклились на своем LOTUS"е? Я Вам предложил альтернативный (и на мой взгляд, очень красивый) вариант...

там в дереве только ОДНО поле показывается,
а ведь я говорил что мне надо несколько.


Правильно... В дереве одно... А справа - все остальные. Идея ясна?


Darker   (2002-05-16 07:17:00) [14]

Ну например в LOTUS`e есть такое дерево.
А BDE тут по моему не причем, к тому же
там в дереве только ОДНО поле показывается,
а ведь я говорил что мне надо несколько.


Lusha   (2002-05-14 16:24:00) [15]

А собственно чем помочь то, идеей? Ловите... Есть замечательная программулька BDE Administrator. Она позволяет редактировать различное количество "полей" для каждой ветки "дерева" (списка Alias"ов)...


Наверх

Титульная страница Поиск, карта сайта Написать письмо