Автор Юрасов Вадим , дата публикации 24 сентября 2003г. |
Назначение и применение
Компонент DBTreeFilter предназначен для визуализации иерархических структур, хранящихся в реляционных источниках данных. От обычного DBTreeView компонент отличатся возможностью выбора конкретных элементов построенного дерева и получением этого набора в виде перечня отмеченных элементов. Результат можно использо-вать в качестве фильтра для запросов, входного параметра хранимых процедур и т.д.
Компонент разработан для языка программирования Borland Delphi версий 5, 6 и 7.Описание
В качестве источника данных для построения дерева используется dataset (таблица, запрос, хранимая процедура). В данном случае применяется классическая для DBTreeView структура:
Поле "Признак группы" является необязательным. Оно служит для ускорения построения дерева. То есть, если есть возможность указать, что у данного элемента могут быть потомки, то это лучше сделать.
Дерево можно строить в двух режимах: все сразу, до конечных уровней и постепенно, в процессе просмотра (при раскрытии ветки). Переключатель режимов - свойство BuildFullTree.
Возможено включение и отключение режима выбора конкретных элементов (свойство ChecksActive). При отключении получаем обычный компонент DBTreeView.
Поскольку компонент является наследником класса TTreeView, то полностью наследует его свойства и методы.
Кроме того, добавлены свойства:Рассмотрим работу компонента на примере иерархического классификатора принадлежности предприятий области к отраслям народного хозяйства.
В данном случае мы видим, что строка состоит только из одного кода "168", соответствующего корневому элементу "Всего по энергосистеме"
Если мы снимем отметку, например, с элемента "V. Строительство", то получим следующий результат: корневой узел подсвечивается серым цветом (выбраны не все элементы), выходная строка состоит из семи кодов. Стоит обратить внимание, что в данном случае не выводятся коды предприятий, относящихся к лесному хозяйству, поскольку этот уровень полностью отмечен.
Если снять отметку, скажем, с Борского лесхоза, то свойство OutLightTree будет содержать уже коды отмеченных предприятий, относящихся к лесному хозяйству, поскольку сам уровень "III. Лесное хозяйство" является частично выбранным.
Особенности работы
Задания списка отмечаемых элементов перед построением дерева возможно только в свойстве OutFullTree c указанием конечных отмеченных элементов. Построение дерева на основе OutLightTree не реализовано ввиду сомнений в нужности данной операции).Соответственно для корректного отображения дерева следует выставить BuildFull-Tree:=True.
Построение дерева. При использовании свойства FieldWithGroup (признак группового элемента) формирование дерева идет достаточно быстро (иерархия из 6500 элементов (приведенный пример) строится 6 секунд (Pentium III 1ГГц, 256 мегабайт памяти)).
Если же данное свойство не активно, то скорость построения дерева очень сильно зависит от того, какой механизм доступа к данным используется. Если ADO, то разница настолько несущественна (на размерности в 6500 элементов - порядка 1 секунды, то есть 7 секунд на построение дерева без признака групп), что свойство FieldWithGroup можно вообще не использовать. Если же используется BDE подключение, то отключение этого свойства на больших объемах очень сильно тормозит формирование дерева. Дело в том, что в алгоритме построения для источника данных используется метод Lookup, который по разному срабатывает для ADO и BDE. Поэтому для BDE реализован несколько иной механизм, с использованием закладок, в результате чего скорость работы существенно ниже, чем при использовании ADO.
материал подготовил Титов Дмитрий
Разработчики
Компонент DBTreeFilter разработан Юрасовым Вадимом