Форум: "Начинающим";
Текущий архив: 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.074 c