Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

TreeView и база данных   Найти похожие ветки 

 
ChainikDenis ©   (2012-04-17 11:26) [0]

Затупил по полной, прошу помощи.

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

Делаю запрос к базе, получаю таблицу групп. И пытаюсь построить дерево. В качестве примера пытаюсь использовать http://decoding.narod.ru/practic/treeview/treeview.html

Верхние группы разместил без проблем, но вот дочерние никак не придумаю. Ведь искать дочернюю группу, что бы добавить ее к родительской, нужно по полю в котором индекс родительской, а в TreeView эта информация не хранится. Там только наименование группы. Но группы могут иметь одинаковое название, что конечно абсурд. Где бы мне в TreeView сохранить не только название группы, но и ее ID в базе, что бы легко было по базе шарится используя этот ID.

Эта же проблема потом вылезет при разворачивания списка номенклатуры, которая в эту группу вылезет.

Думаю что велосипед изобретаю, но все-таки помогите плиз.


 
stas ©   (2012-04-17 11:34) [1]

NODE.DATA - сюда можно писать что угодно...


 
sniknik ©   (2012-04-17 11:35) [2]

> а в TreeView эта информация не хранится.
кто мешает ее там хранить? у нодов есть data под данные, любые в принципе.


 
Ega23 ©   (2012-04-17 12:55) [3]

1. Можно взять готовый компонент, они есть (в DevExpress вроде что-то было).
2. Можно написать самому.
 2.1. Можно написать полноценный TDBTreeView, но нужно будет детально разбираться с TDataSet, TDataSource и TDataLink. Универсализма не достичь, ибо для построения дерева нужен DataSet который фетчит записи до конца.
 2.2. Для решения конкретной задачи можно задействовать стнадартный TTreeView с его TTreeNode.Data. Но лично я бы предпочёл взять TVirtualStringTree от SoftJems.


 
ChainikDenis ©   (2012-04-17 15:51) [4]

Спасибо. Разобрался. Правда повозится с указателями пришлось малость ...


 
sniknik ©   (2012-04-17 17:00) [5]

> Правда повозится с указателями пришлось малость ...
зачем? у тебя же id интеджер, или нет?


 
Ega23 ©   (2012-04-17 17:04) [6]


> Спасибо. Разобрался. Правда повозится с указателями пришлось малость ...


Node.Data := Pointer(ID);
ID := Integer(Node.Data);


 
Влад   (2012-04-17 19:26) [7]

http://www.delphisources.ru/pages/faq/base/dbtreeview.html


 
Ega23 ©   (2012-04-17 22:19) [8]


> Влад   (17.04.12 19:26) [7]
>
> http://www.delphisources.ru/pages/faq/base/dbtreeview.html


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

Это очень, очень и очень спорное утверждение.

For i:=1 To qTreeCompanies.RecordCount Do

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

// Добавим фиктивную (пустую) дочернюю ветвь только для того,
// чтобы был отрисован [+] на ветке и ее можно было бы раскрыть


Вот только есть проблема: [+] должен быть отрисован только в тех узлах, которые мы действительно можем раскрыть. Если у нас лист дерева, то никакого плюса быть не должно.

if Node.getFirstChild.Data = nil then

А вот фиг. Integer(nil) = 0. А где гарантия, что я не поставлю для корневого узла ID =0, ParentID = null? Кстати, ЕМНИП, далеко не все СУБД позволят вторичный ключ на ParentID наложить, если в корневом узле не null (что, в общем-то правильно).

qTreeAnalytic.Sql.Clear;
    qTreeAnalytic.Sql.Add(Sql);


Бр-р-р-р-р...


 
AV ©   (2012-04-18 10:59) [9]

да, пора Королеве переписать статейку :)


> Ega23 ©   (17.04.12 22:19) [8]

не желаешь?
Включив VirtualTreeView, например, с

> [+] должен быть отрисован только в тех узлах, которые мы
> действительно можем раскрыть. Если у нас лист дерева, то
> никакого плюса быть не должно.


 
Ega23 ©   (2012-04-18 11:06) [10]


> не желаешь?


Статейку написать?
Так писали же, с Alkid-ом. Уже с Зотовым о рецензировании договорились. А потом - забили болт, показалось мышиной вознёй какой-то. Интерес пропал.


> да, пора Королеве переписать статейку :)


Да, от неё не ожидал.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
15-1333448205
Inovet
2012-04-03 14:16
2013.03.22
Бывают ли дефектные пиксели на E-Ink?


2-1338620541
novichek
2012-06-02 11:02
2013.03.22
FireMonkey - Binding


3-1284544747
yurikon
2010-09-15 13:59
2013.03.22
Выбор базы данных


15-1334125667
boriskb
2012-04-11 10:27
2013.03.22
Построение равносторонего треугольника


2-1335292096
artemchik
2012-04-24 22:28
2013.03.22
настройка Delphi