Библиотека компонент EhLib Руководство разработчика


Режим хранения записей в виде дерева (TreeView)



страница9/13
Дата09.08.2019
Размер456 Kb.
#128179
ТипРуководство
1   ...   5   6   7   8   9   10   11   12   13

Режим хранения записей в виде дерева (TreeView).


В режиме дерева TMemTableEh создает объекты-узлы (типа TMemRecViewEh) для каждой записи внутреннего массива записей. Объект-узел имеет ссылку на запись (свойство Rec) и ссылку на список подузлов (NodeItems).

Настройка и активизация режима TreeView осуществляется с помощью подсвойств объекта TMemTableEh.TreeList. TMemTableEh автоматически добавляет новые записи в дерево, используя свойства TreeList.KeyFieldName и TreeList.RefParentFieldName. При появлении новой записи, MemTable пытается найти для нее Parent запись, осуществляя поиск записей, у которых значение поля KeyFieldName равно значению поля RefParentFieldName новой записи. Кроме того, он проверяет, не является ли новая запись Parent записью для уже существующих записей. Формирование дерева записей значительно ускоряется, если создать индексы по полям указанным в TreeList.KeyFieldName и TreeList.RefParentFieldName. Однако максимальной скорости формирования дерева можно добиться когда поток новых записей поступает в правильной последовательности, т.е. вначале должна идти Parent запись, а затем ее Chield записи, причем если у Chield записи есть SubChield записи то они должны идти сразу после Chield. При этом индексы создавать не рекомендуется, они могут только замедлить создание дерева. Другими словами данные должны идти в той последовательности, в какой они будут отображаться в дереве. При такой последовательности поступления записей рекомендуется также отключить свойство FullBuildCheck.


Свойства объекта TMemTableEh.TreeList:

Active: Boolean Определяет, что режим TreeView включен. В режиме TreeView вы можете обращаться к свойствам TMemTableEh: TreeNodeLevel, TreeNodeExpanded, TreeNodeHasChildren, TreeNodeChildCount.

KeyFieldName: String Содержит название ключевого поля записи. Дочерние записи будут ссылаться на родительскую запись с ключом определенным полем KeyFieldName.

RefParentFieldName: String Содержит название поля содержащего ссылку на родительскую запись.

DefaultNodeExpanded: Boolean Определяет значение свойства Expanded для новых узлов дерева.

DefaultNodeHasChildren: Boolean Определяет значение свойства HasChildren для новых узлов дерева.

FullBuildCheck: Boolean Определяет необходимость делать проверку на наличие существующих Child записей при изменении записи или добавлении новой записи. Выставление этого свойства в False может ускорить формирование дерева, но при заполнения DataSet’а все Child записи должны идти после Parent записи.
Для доступа к состоянию узла дерева текущей записи Dataset’а, можно использовать следующие свойства TMemTableEh:

RecView: TMemRecViewEh – ссылка на объект-узел дерева, доступна только в режиме дерева.

TreeNodeLevel: Integer – уровень узла в дереве.

TreeNodeExpanded: Boolean – узла в дереве раскрыт.

TreeNodeHasChildren: Boolean – узел имеет Child узлы.

TreeNodeChildCount: Integer – количество Child узлов.



Работа с полями типа AutoIncrement


TMemTableEh имеет объект AutoIncrement со свойствами InitValue и Step для работы с полями у которых значения генерируется автоматической последовательностью чисел. У таких полей свойство TFIeld. AutoGenerateValue = arAutoInc. Значения для таких полей генерируются автоматически при заведении новой записи на основе внутреннего счетчика. Начальное значение счетчика задается свойством InitValue. После заведения новой записи значение счетчика увеличивается на число заданное свойством Step.

При работе TMemTableEh с подключенным DataDriver’ом значение автоинкрементных полей обычно генерируется сервером. Чтобы TMemTableEh мог получать значения полей, генерируемых сервером, рекомендуется использовать TMemTableEh и TSQLDataDriver (или порожденный от него) в следующей конфигурации:

Проставить значения свойств InitValue и Step в -1. Значения AutoIncrement полей до отправки новых записей на сервер будут иметь отрицательные значения.

Прописать дополнительные параметры в свойстве TSQLDataDriver.SpecParams, чтобы SQLDataDriver мог получать значения AutoIncrement полей генерируемых сервером. При применении обновлений, до или после (в зависимости от типа сервера) добавления записи на сервере, SQLDataDriver запросит новое сгенерированное значение счетчика и присвоит его AutoIncrement полю на клиенте.



Использование индексов.


Индексы в TMemTableEh используются для ускорения операций поиска. Они в частности используются при формировании древовидной структуры записей, в процедуре Locate и в MasterDetail отношениях. Шаблон индексов задается в коллекции IndexDefs. TMemTableEh создает индексы на основе шаблона IndexDefs автоматически при создании внутреннего массива данных.

Использование общих данных несколькими датасетами.


TMemTableEh позволяет использовать общий табличный массив записей несколькими компонентами TMemTableEh. При этом один из компонентов TMemTableEh является владельцем массива, а другие подключаются к этому массиву посредствам свойства ExternalMemData типа TCustomMemTableEh. Внешние данные видны другому компоненту TMemTableEh без учета фильтра. Свойство DataDriver может быть присвоено только у MemTable’а владельца массива. Сортировка и фильтрация в каждом датасете не влияет друг на друга.

Перетаскивание записей в TMemTableEh при включенном режиме dghRecordMoving.


Включение значения dghRecordMoving в свойство OptionsEh компонента DBGridEh позволяет перетаскивать записи в компоненте TMemTableEh. Кроме того, при активном режиме TreeList, DBGridEh позволяет при перетаскивании менять уровень записи в дереве. Запись перемещается нажатием и перемещением мыши над колонной индикатора записей (при включенном режиме мультиселека записей вначале надо выбрать записи которые надо переместить).

Тип поля TRefObjectField.


Юнит MemTableEh содержит описание и код регистрации нового типа поля – TRefObjectField. TRefObjectField предназначен для хранения указателя на объекты типа TObject и содержит свойство Value типа TObject. При создании поля в период разработки вы можете выбрать его в окне добавления поля по имени ‘RefObjectField’. В программе вы можете создать поле этого типа через свойства объекта FieldDefs, задав в качестве типа поля тип ftUnknown.



Поделитесь с Вашими друзьями:
1   ...   5   6   7   8   9   10   11   12   13




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница