|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
treeView в базу и обратно
Приветствую.
Суть: юзер заходит в прогу, создает или меняет дерево (иерархия сотрудников), сохраняет в базу (mysql), в следующий раз загружает это дерево и опять меняет - создает... Как дерево сделать в базе?? Я за здоровый экстрим! Спасибо за "спасибо") |
#2
|
||||
|
||||
Вам структуру БД для формирования дерева? Обычно так: ID, ParentID, Context
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
а алгоритм разворачивания из БД?
у меня у дедки может и пра-пра-правнучка(и) быть) зачем context? Я за здоровый экстрим! Спасибо за "спасибо") |
#4
|
||||
|
||||
Цитата:
Цитата:
Допустим есть такая иерархия: Точка - Линия - Многоугольник - Прямоугольник - Квадрат Точка - Линия - Многоугольник - Трапеция - Ромб В базу запишется: ID, ParentID, Context 1, -1, Точка 2, 1, Линия 3, 2, Многоугольник 4, 3, Прямоугольник 5, 4, Квадрат 6, 3, Трапеция 7, 6, Ромб Иерархию можно продолжать до бесконечности. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 29.07.2013 в 17:07. |
#5
|
||||
|
||||
и вместо обычного treeView использовать DBVirtualTreeView (или подобные)
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#6
|
||||
|
||||
получается, дерево строится, но только если имена в базе упорядочены, начиная с корня, сверху-вниз, вот так
имя | начальник зам.директор1 | директор зам.директор2 | директор зам.директор3 | директор ст.менеджер | зам.директор1 ст.монтажник | зам.директор2 прораб | зам.директор3 менеджер | ст.менеджер код: Код:
TreeView1.Items.Clear; TreeView1.Items.AddChild(nil, 'root'); dm.ADOQuery1.SQL.Text:='select surname, boss from stryktyra'; dm.ADOQuery1.Open; dm.ADOQuery1.First; while not dm.ADOQuery1.Eof do begin for i:=0 to TreeView1.Items.Count-1 do begin if TreeView1.items[i].Text = dm.ADOQuery1.FieldByName('boss').AsString then TreeView1.Items.AddChild(TreeView1.items[i], dm.ADOQuery1.FieldByName('surname').AsString); end; dm.ADOQuery1.Next; end; а если структура не упорядочена, например имя | начальник зам.директор1 | директор прораб | зам.директор3 зам.директор2 | директор менеджер | ст.менеджер зам.директор3 | директор ст.менеджер | зам.директор1 ст.монтажник | зам.директор2 то это получается нужно делать несколько прогонов с условием, что имени нет в дереве. то есть все это пихать еще в FOR от 1 до количества записей в БД... примерно прикинул - доолго!! мой метод в лоб и нубский, какие еще алгоритмы существуют? Я за здоровый экстрим! Спасибо за "спасибо") |