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

Вниз

Поиск в динамически создаваемом TreeView   Найти похожие ветки 

 
alexeis ©   (2008-12-02 16:16) [0]

Здравствуйте.
Имеется TreeView, которое заполняется динамически из БД. Вопрос: как организовать в нем поиск необходимых данных? Понятно, что это сводится к поиску по БД, но не ясно как это отразить в TreeView...
PS
Ноды добавляются динамически, по событию OnExpanding. Загонял бы всю базу в тривью сразу - не было бы проблемы поиск сделать.
Кто уже сталкивался с подобным?


 
clickmaker ©   (2008-12-02 16:24) [1]

первичный ключ есть в БД? В нодах он сохраняется?


 
alexeis ©   (2008-12-02 16:28) [2]

Конечно.
Ноды добавляются следующим образом:
     NewNode := TreeView.Items.AddChildObject(Node,Trim(R^.name),R);
Туда не только ПК, а и еще много другой информации


 
clickmaker ©   (2008-12-02 16:31) [3]

ID родителя, значит, тоже есть?
ну тогда поиск сводится к:
- определяем ID искомой записи
- определяем цепочку от этого ID до корня
- раскрываем цепочку в тривью, если она еще не раскрыта
- выделяем нод с найденным ID


 
alexeis ©   (2008-12-02 16:48) [4]


> ID родителя, значит, тоже есть?
> ну тогда поиск сводится к:
> - определяем ID искомой записи
> - определяем цепочку от этого ID до корня
> - раскрываем цепочку в тривью, если она еще не раскрыта
> - выделяем нод с найденным ID


Получается, нужно идти от обратного... Неудобно((


 
alexeis ©   (2008-12-02 16:48) [5]

Но попробую)


 
stas ©   (2008-12-02 16:51) [6]

У тебя должен запрос возвращать 2 колонки 1-я ID родителя 2-я ID ребенка, причем на каждого родителя всех пра-пра-...-внуков )))


 
alexeis ©   (2008-12-03 09:27) [7]


> У тебя должен запрос возвращать 2 колонки 1-я ID родителя
> 2-я ID ребенка, причем на каждого родителя всех пра-пра-
> ...-внуков )))


Есессно))
У меня упрощенно хранимая процедура возвращает следующий НД:

id      | parent_id   | name

172   |167            |Цех№1
172   |170            |Цех№1
180   |167            |Цех№2
180   |169            |Цех№2

Эта хранимая процедура представляет такую структуру:

-Предприятие (167)
 --Производство №1(170)
    --цех№1(172)
 --Производство №2(169)
    --цех№2(180)

как мне в этом случае строить дерево? Не могу разобраться(
По большому счету, из хп могу вытянуть любой НД, может представленного выше не достаточно?


 
Сергей М. ©   (2008-12-03 11:38) [8]


> У меня упрощенно хранимая процедура возвращает следующий
> НД


Т.е. эта ХП возвращает НД всего дерева, вместо того чтобы возвращать только данные о детях интересующего родителя ?


 
alexeis ©   (2008-12-03 12:58) [9]


> Т.е. эта ХП возвращает НД всего дерева, вместо того чтобы
> возвращать только данные о детях интересующего родителя
> ?

Она возвращает необходимые наименования узлов, заданных в критериии поиска. Например поиск я задал таким образом "%Це%".
Вот оно вернуло
id      | parent_id   | name

172   |167            |Цех№1
172   |170            |Цех№1
180   |167            |Цех№2
180   |169            |Цех№2
Причем я вернул не только id искомой записи, а еще и id их родителей, вплоть до корня. Теперь полный путь от искомых узлов к их родителям будет таким:
172-170-167
180-169-167
Конечно, нужно еще добавить информацию о родителях родителя вплоть до корневого узла. Например, чтобы возвращаемый НД был таким:
id      | parent_id   | name

172   |167            |Цех№1
172   |170            |Цех№1
180   |167            |Цех№2
180   |169            |Цех№2
170   |167            |Производство№1
169   |167            |Производство№2
167   |nil              |Предприятие
По большому счету, это не трудно сделать.
Как потом найти полный путь, и тем более как этот путь потом отобразить в treeview, если, повторюсь, он заполняется динамически-вот для меня проблема(


 
Сергей М. ©   (2008-12-03 13:02) [10]


> Она возвращает необходимые наименования узлов, заданных
> в критериии поиска


А должна, судя по задаче, возвращать ID и NAME узлов, чей ParentID равен ID узла, вызвавшего событие OnExpanding


 
alexeis ©   (2008-12-03 13:10) [11]


>  должна, судя по задаче, возвращать ID и NAME узлов, чей
> ParentID равен ID узла, вызвавшего событие OnExpanding

Да. Когда кликаем на узле, оно так и делает и на OnExpanding у меня конечно другая хп, которая действительно возвращает
> возвращать ID и NAME узлов, чей ParentID равен ID узла,
> вызвавшего событие OnExpanding


Но в данном топике меня интересует именно поиск необходимых наименований, с отображением результатов поиска в treeview. Поиск то мы задаем по необходимому критерию.


 
Сергей М. ©   (2008-12-03 13:22) [12]


> как организовать в нем поиск необходимых данных? Понятно,
>  что это сводится к поиску по БД


Мне вот пока не понятно, зачем лезть в БД, если поиск осуществляется среди уже добавленных в TreeView узлов ?
Как все это связано с кликами юзера на узлах дерева, при которых происходит подгрузка ?


 
stas ©   (2008-12-03 13:30) [13]

Сергей М. ©   (03.12.08 13:22) [12]
Если я правильно понял
У него дерево наполнено только верхним уровнем(родителями), а искать нужно детей на любом уровне и при нахождении открыть всю ветку.


 
clickmaker ©   (2008-12-03 13:31) [14]

так а чем [3] не подходит? там же все предельно тупо


 
Сергей М. ©   (2008-12-03 13:31) [15]


> stas ©   (03.12.08 13:30) [13]


О причем здесь тогда OnExpanding ?


 
Сергей М. ©   (2008-12-03 13:33) [16]

И вообще - к чему весь этот велосипед, если на то существует готовый TDBTreeView ?


 
alexeis ©   (2008-12-03 13:48) [17]


> Если я правильно понял
> У него дерево наполнено только верхним уровнем(родителями),
>  а искать нужно детей на любом уровне и при нахождении открыть
> всю ветку.

Совершенно верно

> И вообще - к чему весь этот велосипед, если на то существует
> готовый TDBTreeView ?

А с этого места подробней пожалуйста)
Это готовый компонент? Если да, где его можно взять?


 
Сергей М. ©   (2008-12-03 13:52) [18]

http://www.google.ru/search?q=TDBTreeView&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


 
Amoeba ©   (2008-12-03 15:05) [19]


> > И вообще - к чему весь этот велосипед, если на то существует
> > готовый TDBTreeView ?
>
> А с этого места подробней пожалуйста)
> Это готовый компонент? Если да, где его можно взять?
>

Например, в JVCL. Он там даже поддерживает прямое редактирование структуры дерева прямо в нем самом.


 
alexeis ©   (2008-12-04 09:13) [20]


> Например, в JVCL

А какую версию под D6, D7 можно потянуть?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1227442297
Slider007
2008-11-23 15:11
2009.01.18
С днем рождения ! 23 ноября 2008 воскресенье


15-1227050125
Германн
2008-11-19 02:15
2009.01.18
Ох уже эти бабы!


2-1228755197
cruiser
2008-12-08 19:53
2009.01.18
чтение Unicode символов в caption компонентов


2-1228493669
Смирнов Сергей
2008-12-05 19:14
2009.01.18
Поддержка Proxy


2-1228255215
Te
2008-12-03 01:00
2009.01.18
Работа с классом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский