Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.18;
Скачать: CL | DM;

Вниз

Поиск в динамически создаваемом 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
1-1206427071
scat
2008-03-25 09:37
2009.01.18
Некорректное поведение унаследованной формы


2-1228647187
aglar
2008-12-07 13:53
2009.01.18
Правильно ли составлен запрос SQL?


15-1227066140
ArMellon
2008-11-19 06:42
2009.01.18
Нужен совет...


2-1228492011
dbgrid
2008-12-05 18:46
2009.01.18
Как определить на какой строке грида нах-ся курсор?


15-1227016168
Kolan
2008-11-18 16:49
2009.01.18
Инструменты для картографии