Посадили деревья в саду.
Тихо, тихо, чтоб их ободрить,
Шепчет осенний дождь.

Мацуо Басе

Древовидные структуры данных и компонент TreeView

Компонент TreeView  служит для вывода данных в иерархическом виде (древовидная структура). Примерами иерархических данных может служить структура компании, различные классификаторы.

Признаком иерархической структуры является наличие ссылки на родительский элемент в той же таблице. В MVD целостность такой ссылки не поддерживается на уровне СУБД, используется любое поле для хранения целочисленного значения.

Унаследованные свойства

Таблица 1. Общие свойства таблицы

НазваниеСвойствоОписание
NameНазваниеУникальное в пределах формы имя компонента.
LeftЛевоАбсцисса положения верхнего левого угла компонента относительно родительского компонента. 
TopВерхОрдината положения верхнего левого угла компонента относительно родительского компонента.  
WidthШиринаШирина компонента, в пикселях
HeightВысотаВысота компонента, в пикселях
VisibleВидимостьПризнак видимости компонента.
AnchorsЯкоряФиксация положение верхней, нижней, правой или левой стороны компонента относительно родительского.
FontШрифтГруппа свойств для настройки шрифта (тип, размер, цвет и стиль), которым отображается заголовок и содержимое таблицы.
ColorЦветЦвет фона таблицы
TabStopТабулостопЭтот флаг определяет, включать ли компонент в очередь обхода.
TabOrderПоследовательность табуляцииПорядковый номер в очереди обхода компонентов клавишей Tab (Shift+Tab).
EnabledДоступенСвойство определяет, доступен ли данный элемент для взаимодействия и можно ли ему передать фокус.
ReadOnlyТолько для чтенияФлаг, запрещающий редактирование данных.
ConstraintsОграниченияОпределяют минимальные и максимальные размеры элемента при его растягивании.
HintПодсказкаЭто свойство позволяет задать текст всплывающей подсказки.
ShowHintПоказать подсказкуФлаг, определяющий, нужна ли всплывающая подсказка для данного элемента.
CursorКурсорС помощью этого свойства можно менять внешний вид курсора при наведении указателя на визуальный компонент.
BiDiModeРежим двунаправленностиУправление режимом автоматического распознавания направления ввода или отображения данных.

📝 Подробное описание общих свойств находится в разделе “Формы

Таблица 2. Свойства, дающие возможность редактирования

СвойствоНазваниеОписание
AllowCreateРазрешить добавлениеВ верхней части таблицы появляется строка для ввода новых данных. Запись добавляется при нажатии клавиши Enter.
AllowEditРазрешить редактированиеРазрешить редактирование данных прямо в таблице. Для начала редактирования кликните по ячейке. При потере редактируемой ячейкой фокуса данные сохраняются в базе.
AllowDeleteРазрешить удалениеРазрешить удаление нажатием клавиши “Delete”. Перед удалением появляется предупреждение.

Таблица 3. Свойства, меняющие поведение Table Grid

СвойствоНазваниеПримечание
HomeEndBehaviorПоведение кнопок “Home” и “End”Управление логикой работы кнопок “Home” и “End”. Можно выбрать два вариант поведения данных кнопок, которые обычно используются для навигации по таблице:
hebTopBottom – перемещение в начало/конец колонки
hebLeftRight – перемещение в начало/конец строки
KeepUserSortСохранить пользовательскую сортировкуИспользуется в режиме, когда таблица отображает динамически отфильтрованные данные для сохранения пользовательской (runtime) сортировки при обновлении данных.
MouseWheelEnabledЗадействовать колесо мышиПо умолчанию включено. Колесо мышки используется для прокрутки содержимого таблицы.
WantTabsРеакция на TabОпределяет реакцию компонента на нажатие клавиши <ТаЬ>. Если свойство установлено в значение True, то при нажатии клавиши <ТаЬ> в текст вставляются символы табуляции. По умолчанию свойство WantTabs имеет значение False, и при нажатии клавиши <ТаЬ> таблица передает фокус ввода следующему оконному элементу управления.
Increm, SearchКнопка “ПОИСК”Таблица может выступать в качестве инструмента управления фильтрацией, если её указать в качестве источника данных при настройке кнопки с действием [ПОИСК]. Для того, чтобы фильтрация менялась синхронно с перемещением по строкам таблицы, укажите в данном свойстве кнопку, отвечающую за поиск данных.

📝 Подробное описание общих свойств, находящихся в таблицах 2 и 3, находится в разделе “Отображение табличных данных“.

Дополнительные свойства

Компонент TreeView является наследником компонента Table Grig, поэтому большая часть свойств у них совпадает, но имеются несколько специфических.

Таблица 4. Свойства TreeView

СвойствоНазваниеОписание
ExpandLockЗакрыть развёртываниеФлаг позволяет запретить сворачивание узлов, чтобы дерево всегда было развёрнуто.
FirstEmptyItemПервый пустой элементДобавляет первую пустую строку как виртуальный корневой элемент.

Настройка подключения к данным

Выберите компонент TreeView (1), нажмите кнопку отображения мастера настройки свойства Settings (2). В открывшемся окне наберите название таблицы или выберите внешний ключ (ссылку на таблицу с древовидными данными) (3). Затем в выпадающем списке (4) выберите название поля, в котором хранится ссылка на родительский элемент. С помощью кнопки (5) сформируйте список для отображения данных (6). Это может быть одно или несколько полей. Сохраните настройки (7).

Принцип формирования списка такой же, что и при настройке компонента Table Grid (см. гл. 6.2).

Редактирование данных

Отличительной особенностью редактирования иерархических данных является то обстоятельство, что при добавлении новой записи пользователю надо каким-то образом указать, в какое место относительно текущей записи будет добавлена новая. Поэтому стандартный режим редактирования дерева подразумевает использование всплывающего меню, а также установка флагов AllowCreate, AllowEdit и AllowDelete (1). Кроме того, в свойстве Form нужно выбрать форму редактирования (2). 

В результате получаем возможность добавлять, редактировать и удалять записи в дереве через всплывающее контекстное меню:

Фильтрация данных

Хотя у компонента TreeView в настройках есть свойство “Фильтр”, обратите внимание, что структура дерева загружается последовательно, от корневых элементов к веткам, поэтому, если в результате фильтрации скрывается какой-то элемент, то автоматически скрываются и все его дочерние элементы.

Правила для составления фильтра такие же, что и для фильтра таблицы, подробно описаны в разделе “Отображение табличных данных“.

Сортировка

По умолчанию задана сортировка по полю ParentID. Это необходимо для правильной и быстрой загрузки дерева. Без применения скриптов изменить сортировку дерева невозможно.

Служебные колонки

Кроме колонок с данными в дереве можно отобразить две служебные колонки:

Таблица 10. Служебные колонки

КолонкаНазначениеОписание
#Auto-NumberПорядковый номерОтображается порядковый номер отображаемой строки.
#CheckboxЧекбоксОтображается чекбокс *. 

📝 Колонка с чекбоксом появилась в версии 5.6, для работы с ней необходимо написание скрипта.

Отображение изображений

В дереве можно отображать изображения, если добавить в список отображаемых полей поле с типом “Изображение”. Изображение автоматически растягивается по размеру ячейки. Для увеличения высоты ячейки по умолчанию используйте свойство DefaultRowHeight. Если вы хотите иметь возможность менять высоту ячейки в процессе выполнения программы, установите свойства Options.goRowResizing и Options.goIndicator в значение True. Ширина ячейки настраивается пользователем в процессе выполнения программы и автоматически запоминается при завершении работы.

Теперь вы знаете всё о визуальных компонентах My Visual Dabase. Осталось сказать несколько слов о системе управления доступом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *