![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 29.10.2007
Сообщений: 4
|
![]()
Вопрос банальнее некуда, а врубиться не могу.
Идея такая. Есть примерно такая табличка: # Название #предка 1 ляляля 1 2 111111 1 3 312321 2 4 ролрол 1 5 уокуку 3 ..... Я её хочу закинуть в дерево TreeView: for i:=1 to pathtableentries do begin if i=1 then treeview1.Items.Add( nil, 'R00T' ); if i<>1 then treeview1.items.AddChild(treeview1. items[PathTableRecord[i].ParentDirectoryNumber-1], PathTableRecord[i].DirectoryIdentifier); end; Программа работает, но результат совсем не тот, что должен быть. Некоторые данные совсем не в том месте, где должны находиться, и при нажатии на определённый элемент в дереве, текст выводится верный, а номер явно ошибочный. Подскажите как правильно заполнить дерево. |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
А вы вот так сделайте:
Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 29.10.2007
Сообщений: 4
|
![]()
Пример компактный, но не совсем подходит.
В этом случае все "элементы" становятся "детьми" узла R00T. Сорри за плохо заданный вопрос. Структура данных: Код:
Все примеры, что я нашёл здесь на форуме, да и в интернете громоздкие и не совсем подходят для моей цели. Подскажите краткое и грамотное решение плизз |
![]() |
![]() |
![]() |
#4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Если вы отсортируете свой рекорд по индексу предка и по собственному индексу (именно в такой последовательности), то алгоритм будет однопроходным - последовательный просмотр и выбор - или в корень, или в "детки" только что внесенному "предку".
С БД гораздо проще. И, как всегда, структура данных должна облегчать получение результата. |
![]() |
![]() |
![]() |
#5 |
Регистрация: 29.10.2007
Сообщений: 4
|
![]()
с базами данных намного проще, однозначно
![]() У меня перед сном озарения бывают. Алгоритм наверно не самый лучший, но работает: Код:
Код:
![]() Последний раз редактировалось Leonis; 26.03.2008 в 23:47. |
![]() |
![]() |
![]() |
#6 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Одного никак не пойму:
treeview1.Items.Add(nil, 'R00T' ) У вас же этот элемент имеет имя "ляляля"... Вернее, не имя, а текст. А вы почему-то обзываете его ROOT... |
![]() |
![]() |
![]() |
#7 |
Регистрация: 29.10.2007
Сообщений: 4
|
![]()
Я ведь поправился
![]() В первом посте я закинул в табличку первое, что пришло в голову, чтобы было понятно из чего она примерно состоит. Да и этот 'R00T' - всего лишь рабочее название, первое что пришло в голову на момент написания кода ![]() Вообще, TreeNode's для меня всё равно тёмный-претёмный лес, и надеюсь, что с этим компонентом мне больше не придётся сталкиваться в жизни ![]() Спасибо за советы, сортировка в моём случае была бы не лишней (если бы таблица не была уже отсортирована предварительно) ! ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TTreeView поиск по имени | Родион | Компоненты Delphi | 6 | 05.05.2008 14:07 |
перебор всех элементов в TtreeView | vitalik007 | Общие вопросы Delphi | 10 | 09.04.2008 15:44 |
где найти нормальный TTreeView | andrey4623 | Общие вопросы Delphi | 6 | 27.03.2008 00:15 |
TTreeView | alll_23 | Общие вопросы Delphi | 2 | 23.10.2007 12:36 |