Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
Привет всем! Вот возникла такая проблемка. Пишу прогу для диспетчерсой службы нашего предприятия. Там есть база подразделений предприятия, на основе которой строиться TreeView. Затем для каждого оперативного документа создаю,чтото типа шаблона (какие подразделения участвуют, какие данные к подразделению привязывать и тп). Так вот, уже ближе к вопросу, в форме этого шаблона есть два TreeView_а, первый с исходной иерархией подразделений предприятия, второй с подразделенирями входящих в шаблон этого документа. При добавлении нового подразделения в шаблон, мне нужно в TreeView шаблона добавить непосредственно выбранное подразделение и все подразделения стоящие по иерархии над ним. Но может возникнуть ситуация, что подразделения стоящие выше по иерархии уже есть в этом TreeView_е. Как проверить есть они в TreeView_е или нет. Вопрос: есть ли возможность поиска узла дерева (TreeNode), по дескриптору узла (TreeNode.Data),или еще по какому нибудь признаку, кроме перебирания каждого узла по индексу и проверки его дескриптора "если - то". Вот. Вродибы все! За ранее благодарен. P.S. Прошу прощения за грамматические, терминалогические и др. ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 11:50 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
А данные то где хранятся? С .dbf чтоли работаешь? По дереву - только перебором ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 11:58 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
нет, раньше дело имел с DBF и DB, а что сильно заметно? А это моя первая попытка на InterBase6. база подразделений имеет поля: поинт корневого объекта, уровень в дереве, поинт родительского объекта, код данного ообъекта, название объекта. Эти же поля есть и в базе шаблонов. Но проверить наличие подразделения в базе, труда не состовляет. Меня лично интересовал вопрос проверки наличия объекта в дереве только не перебором. спасибо за ответ, если будет еще,я буду толь рад, и благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 12:12 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
Дык если БД есть - зачем на клиенте проверять? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 12:21 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
чет последнее не понял. наверное мне еще чет надо почитать по ИБ почитать. а можно последнее по подробнее. ееще раз извеняюся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 13:14 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
В VG библиотеке есть DBTReeView. Наверное- то что нужно для вашей задачи. Ищите узел прямо в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 13:29 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
Храни блин в нодах или итемах указатель на свой набор данных - проверяй скока влезет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 14:14 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
KirillovA а я как храню ссылку на набор данных, точно так как ты и сказал, но смысл вопроса поиск узла в дереве опираясь на БД, а не поиск данных в БД опираясь на дерево. но всеравно спасибо за совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 14:35 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
Ну тогда - фор ту - если то не это - - пройди свои итемы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 15:31 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
KirillovA такя интересовался дрругим каким нибудь способом, кроме перебора всех элементов дерева, ну как я понял, такового наверное не существует. всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 15:49 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
Да блин - для такой траблемы - купи себе 285 комп - и работай ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 16:10 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
Есть еще вариант - при заполнении итемов - сохрани два указателя - на итем и данные - и потом обращайся через поинтер - мгновенно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2002, 17:39 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
KirillovA Да блин, вся проблема в том что итемы создаются динамически, в зсвисимости куда по какой ветке пойдешь, и если я правильно понял создавать массив поитеров, время тоже+поиск по массиву поинтеров. Так что делаю как не хотел это делать ПЕРЕБОРОМ. всем спасибо за участие в решении проблемы. а на счет 285 компа я подумаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2002, 11:48 |
|
||
|
Поиск узла по TreeView
|
|||
|---|---|---|---|
|
#18+
//поиск в дереве структуры подстанций procedure TFrm_evday_data.TBtnFind_tree_struClick(Sender: TObject); var var _node:TTreeNode; var ItemsList:TList; var Noddy:TTreeNode; //для процедуры поиска в дереве статей бюджета var Searching :Boolean; //для процедуры поиска в дереве статей бюджета var SearchTarget:string; //для процедуры поиска в дереве статей бюджета var FIND_ITEMS:integer; //для процедуры поиска в дереве статей бюджета begin if (Ed_find_stru.Text='') then begin MessageDlg('Нет значения для поиска!', mtWarning,[mbOk], 0); end; try SearchTarget:= Ed_find_stru.Text;//присвоить переменной значение для поиска Noddy := Tree_ps.Items[0]; //в дереве стать на 0 уровень Searching := true; //включить поиск while (Searching) and (Noddy <> nil) do begin if StrPos(PChar(Noddy. Text), PChar(SearchTarget))<> nil then begin Searching := False; Tree_ps.Selected := Noddy; Tree_ps.SetFocus; FIND_ITEMS:= Tree_ps.Selected.AbsoluteIndex+1; end else begin Noddy := Noddy.GetNext; end; end; except MessageDLG('Ошибка открытия запроса(DM.Query_stru_ps).Вызовите программиста!',mtError,[mbOk],0); end; end; //дальнейший поиск в дереве структуры подстанций procedure TFrm_evday_data.TBtnFindNext_tree_struClick(Sender: TObject); begin if (Ed_find_stru.Text='') then begin MessageDlg('Нет значения для поиска!', mtWarning,[mbOk], 0); end; try SearchTarget:= Ed_find_stru.Text; Noddy:=Tree_ps.Items[FIND_ITEMS]; Searching := true; while (Searching) and (Noddy <> nil) do begin if StrPos(PChar(Noddy. Text), PChar(SearchTarget))<> nil then begin Searching := False; Tree_ps.Selected := Noddy; Tree_ps.SetFocus; FIND_ITEMS:= Tree_ps.Selected.AbsoluteIndex+1; end else begin Noddy := Noddy.GetNext; end; end; except MessageDLG('Поиск завершен.',mtInformation,[mbOk],0); end; end; //------------------------------------------------------------------------------ У меня работает. Потом при поиске можно вытянуть полный путь к узлу на котором стоишь. //определение пути function TFrm_evday_data.GetFullPath(t:TTreeNode):String ; begin If t.Parent<>Nil then Result:=GetFullPath(t.Parent)+'\'+t.Text else Result :=Result+t.Text+'\'; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2002, 10:41 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=2071&tid=2119379]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 437ms |

| 0 / 0 |
