Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.07 c
15-1353086496
ЕщеОдинКакжеНадоели
2012-11-16 21:21
2013.03.22
Random ный список чисел.


15-1340635894
AlexDn
2012-06-25 18:51
2013.03.22
Где взять доменное имя?


15-1347827405
Юрий
2012-09-17 00:30
2013.03.22
С днем рождения ! 17 сентября 2012 понедельник


15-1346830391
LDV
2012-09-05 11:33
2013.03.22
Delphi directory


15-1340195353
xss22
2012-06-20 16:29
2013.03.22
ziptv для XE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский