Главная страница
    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.006 c
2-1228326483
Юрии
2008-12-03 20:48
2009.01.18
Раскладка клавиатуры


2-1228310738
xLaMer
2008-12-03 16:25
2009.01.18
Изменить Текст Tedit в чужом окне


2-1228091350
Deled
2008-12-01 03:29
2009.01.18
Принтер


2-1228223777
alexeis
2008-12-02 16:16
2009.01.18
Поиск в динамически создаваемом TreeView


15-1227639224
Footballer
2008-11-25 21:53
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский