Форум: "Начинающим";
Текущий архив: 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