Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск узла в treeview 
V
    Опции темы
mortisedstalbun
Дата 5.5.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.2.2007

Репутация: нет
Всего: нет



Имеется на форме treeview, который используется для отображения бд access, он подключен к этой бд через стандартный набор: ADOConnection, ADOTable, ADODataSource. При кликаньи правой кнопкой по дереву вылетает PoPupMenu с функцией поиска. Поиск осуществляется по узлам дерева, точнее по свойству text узлов... 
Вот сия процедурка, организованная мною:

Код

found:=InputBox('Контекстный поиск', 'Пожалуйста, укажите значение для поиска', '');
For i:=0 to TreeView1.Items.Count-1 do
  begin
  If Form1.TreeView1.Items[i].Text=found then
    TreeView1.Items.Item[i].Expand(True);
  If Form1.TreeView1.Items.Item[i].Text=found then
    TreeView1.Items.Item[i].Expand(True);
  end;


При чем поиск работает только по полному названию узлов, а не по части названия((  Да и не расскрывает дочерние узлы, только родительские, если был найден узел.  Хочется, чтобы он все-таки расскрыл и дочерние узлы дерева при найденом совпадении... В чем моя ошибка? Вот как организовать раскрытие дочернего узла при удачном поиске???
PM MAIL   Вверх
Savek
Дата 5.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Цитата(mortisedstalbun @  5.5.2008,  15:33 Найти цитируемый пост)
Имеется на форме treeview, который используется для отображения бд access, он подключен к этой бд через стандартный набор: ADOConnection, ADOTable, ADODataSource.

Это что за компонент такой? Или под словом "подключен" имеется ввиду "заполнен информацией из базы"? 

PM MAIL   Вверх
mortisedstalbun
Дата 5.5.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.2.2007

Репутация: нет
Всего: нет



Это компонент, который заполняется инфой из бд
PM MAIL   Вверх
Savek
Дата 5.5.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



По поводу поиска:
Код

//Если вы хотите производить поиск по дереву, может быть для того, чтобы найти узел, //соответствующий определенному критерию, то НЕ ДЕЛАЙТЕ ЭТО ТАКИМ ОБРАЗОМ:

for i := 0 to pred(MyTreeView.Items.Count) do
begin
  if MyTreeView.Items[i].Text = 'Банзай' then
    break;
end;

//...если вам не дорого время обработки массива узлов. 
//Значительно быстрее будет так:

Noddy := MyTreeView.Items[0];
Searching := true;
while (Searching) and (Noddy <> nil) do
begin
  if Noddy.text = SearchTarget then
  begin
    Searching := False;
    MyTreeView.Selected := Noddy;
    MyTreeView.SetFocus;
  end
  else
  begin
    Noddy := Noddy.GetNext
  end;
end;


Для неполного совпадения вместо If Noddy.text = SearchTarget
пишешь If Pos(SearchTarget,Noddy.text) >0

PM MAIL   Вверх
mortisedstalbun
Дата 5.5.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 27.2.2007

Репутация: нет
Всего: нет



Проблемку частично решил.. Т.е. теперь открывает и выделяет определенные узлы при поиске... Так как и хотел.

Код

found:=InputBox('Êîíòåêñòíûé ïîèñê', 'Ïîæàëóéñòà, óêàæèòå çíà÷åíèå äëÿ ïîèñêà', '');
For i:=0 to TreeView1.Items.Count-1 do
  begin
  If Form1.TreeView1.Items[i].Text=found then
    begin
    TreeView1.Items.Item[i].Expand(True);
    TreeView1.Items[i].Parent.Expand(True);
    TreeView1.Selected:=TreeView1.Items[i];
    end;
  end;


Вот только как теперь организовать поиск по части названи яузла... Буду думать...
PM MAIL   Вверх
Savek
Дата 5.5.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Далее, раскрываем все дочерние узлы у найденного (Noddy)

Код

Noddy.Expand(false); //если родитель свернут то дочерние узлы развернуть не получится
ChildNoddy := MyTreeView.Items[0];
while (ChildNoddy <> nil) do
begin
if ChildNoddy.Parent = Noddy then ChildNoddy.Expand(false);
Noddy := Noddy.GetNext
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.