Посадили деревья в саду.
Мацуо Басе
Тихо, тихо, чтоб их ободрить,
Шепчет осенний дождь.
Древовидные структуры данных и компонент 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. Ширина ячейки настраивается пользователем в процессе выполнения программы и автоматически запоминается при завершении работы.
