powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Заполнение TreeView в соответствии со структурой данных
19 сообщений из 19, страница 1 из 1
Заполнение TreeView в соответствии со структурой данных
    #33009979
Задача такая:
Имеется БД в Access, требуется
а) получить список таблиц
б) сформировать ТриВью так, чтобы иерархия узлов в нем соответствовала структуре данных.
Например раскрываем узел "Экспедиция" (которому сответствует tblExpedition), а в нем - узлы, соответствующие связанным с ним таблицам "Исполнители" и "Уловы". Раскрываем "Уловы", а там - узел, соответствующий таблице "Состав" и т.д.
Вручную все это громоздко получается и как-то неидеально. Может, можно какой-нибудь хитрый цикл забабахать?
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33010069
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поищи исходники 'Visual Data Manager'
- в своё время на каждом углу валялись
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33010484
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгорьЧерниенкоб) сформировать ТриВью так, чтобы иерархия узлов в нем соответствовала структуре данных.
Например раскрываем узел "Экспедиция" (которому сответствует tblExpedition), а в нем - узлы, соответствующие связанным с ним таблицам "Исполнители" и "Уловы". Раскрываем "Уловы", а там - узел, соответствующий таблице "Состав" и т.д.
Да, TreeView это позволяет (см. скриншот).
Дерево - глубиной 5: корень ("Товары"), отдел (01..., 02... и т.д.), направление (или макрогруппа), товарная группа, товар.
Строится на основании трёх таблиц: справочник товаров, справочник групп товаров и структура дерева.
Буквально вчера молодой специалист демонстрировал drag-n-drop'ную технологию перестройки дерева с записью новой его структуры в БД.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33012185
Спасибо, очень интересно. Только не очень понятно как, я всего лишь увлеченный дилетант. Ладно, буду дерзать.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33012685
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в общем то , на сервере есть таблица UID,ID,PArentUID а на клиенте идет рекурсия.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33012748
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант без рекурсии. Одно условие - ID потомка не должно быть меньше ID родителя.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    tvTree.Nodes.Clear
    rsDir.Filter = "ParentID = 0" 'или null - у кого как
    While Not rsDir.EOF
        tvTree.Nodes.Add , , "i" & rsDir!ID, rsDir!Text
        rsDir.MoveNext
    Wend
    rsDir.Filter = "ParentID <> 0"
    rsDir.Sort = "ParentID"
    On Error Resume Next 'если вдруг родителя в базе нет, а потомки остались
    While Not rsDir.EOF
        Set nd = tvTree.Nodes.Add("i" & rsDir!ParentID,  4 , "i" & rsDir!ID, rsDir!Text)
        rsDir.MoveNext
    Wend
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33012841
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если уровней 5-10 вложенности ? - только рекурсия
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33012881
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да хоть ста уровней.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33022356
AVVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeа если уровней 5-10 вложенности ? - только рекурсия


Если дерево очень большое и много уровней вложенности, то я строю его в два прохода:
1. Создаю все ноды, но без связывания
2. Связываю ноды: родитель/потомок, т.к. индексы всех нод уже известны.
Не очень затратно по времени, и избавляет от многих проблем со связыванием или поддержкой исходного списка в нужном состоянии.
3. И никакой рекурсии.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33023781
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же самое, только у меня связывание происходит сразу за один проход.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33024484
AVVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТо же самое, только у меня связывание происходит сразу за один проход.

В общих чертах можно обрисовать? Интересно, как сделано.

AVVS
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33025877
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вон же, наверху весь текст.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33026161
AVVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДа вон же, наверху весь текст.

Ну так я же и говорил, что если условие ParentID > ProgenyID, тогда да, все за один раз строится, а если нет?
А у меня (вернее у юзверей) такое часто бывает, что нода из листа становится узлом и на нее подключаются другие ноды, у которых ID может быть меньше. Чтобы не колбасить список перестройкой ID приходится в два приема ...
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33026702
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел на обсуждение этого топика и решил задать вопрос.
А вот это слишком сложно?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub РекурсивноеНаполнение(ByVal ParentID As Long) 'элемента Tree1
   Dim i As Long, curr_id As Long
   Dim n1 As Node
   Node_Level = Node_Level +  1 
   If Not (rsS.EOF And rsS.BOF) Then rsS.MoveFirst
   rsS.Find "ParentID = " & ParentID 'Поиск первого узла для заданного предка
   Do Until rsS.EOF
      curr_id = rsS.Fields("ID")    ' сохраним позицию (рекурсия ее сбивает)
      Set n1 = Tree1.Nodes.Add("A" & ParentID, tvwChild, "A" & rsS.Fields("ID"), rsS.Fields("Text") & "")
      If Node_Level <= m_УровеньNodeVisible Then n1.EnsureVisible 'Необходимые узлы показать
      Call РекурсивноеНаполнение(rsS.Fields("ID")) 'рекурсия на поиск потомков текущего узла
      If Not (rsS.EOF And rsS.BOF) Then rsS.MoveFirst
      rsS.Find "ID = " & curr_id          'Восстановим позицию
      If Not rsS.EOF Then rsS.MoveNext
      rsS.Find "ParentID = " & ParentID  'найти следующего узла для заданного предка на этом уровне
   Loop
   Node_Level = Node_Level -  1 
End Sub
Это - полноценная рекурсивная процедура из работающего приложения.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33049421
Огромное спасибо всем! Получил не только пользу, но и удовольствие. С наступающим Днем Победы!
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33051863
Celtic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос немного не по топику. А какой multi column tree Вы использовали.
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33052651
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Celticкакой multi column tree Вы использовали.Multicolumn - это Grid.
Или ComboBox.
А в Tree - Nodes (во множественном числе).
Так что имелось ввиду под "multi column tree"?
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33052749
Celtic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Processor Celticкакой multi column tree Вы использовали.Multicolumn - это Grid.
Или ComboBox.
А в Tree - Nodes (во множественном числе).
Так что имелось ввиду под "multi column tree"?

Я подумал, что справа на screenshort'e у Вас был использован контрол "multi column tree" (treeview совмещенное с listview, т.е. дерево с колонками).
Сейчас я подыскиваю как раз такой контрол для своей задачи. Вот и хотел поинтересоваться. А что за грид Вы использовали?
...
Рейтинг: 0 / 0
Заполнение TreeView в соответствии со структурой данных
    #33156970
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I'm дико sorry, обнаружил только сейчас, что не ответил на Ваш вопрос.

"дерево с колонками" есть свойство грида от ComponentOne (ранее - VideoSoft):
VSFlexGrid Pro 7.0 includes VSFlexGrid, a full-featured grid control and VSFlexString, a powerful regular expression engine.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Заполнение TreeView в соответствии со структурой данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]