Компонент TDBCtrlGrid

Как уже говорилось, существует два способа визуализации данных - таблицы и формы. В таблицах пользователь может видеть одновременно несколько записей НД, что облегчает ему контроль за данными и выбор необходимой записи. При применении формы пользователь в каждый момент видит на экране лишь одну запись НД, но зато имеет простой доступ к любому ее полю, в том числе многострочному или графическому.

Компонент TDBCtrlGrid в известной мере сочетает в себе удобства обоих способов: он представляет собой таблицу, каждая ячейка которой отображается в виде формы (рисунок 12.10).

Рисунок 8.3 – Пример использования компонента TDBCtrlGrid

Рисунок 8.4 – Пример работы с компонентом TDBCtrlGrid на этапе разработки программы

Для работы с компонентом необходимо поместить его на форму, связать с компонентом TDataSource, который, в свою очередь, связать с каким-либо набором данных (TTable или TQuery) и затем разместить на нем необходимые компоненты для работы с полями базы данных - TDBText, TDBEdit, TDBCheckBox и т. п.

Компоненты для работы с полями базы данных требуется разместить в верхней строке компонента TDBCtrlGrid или, если количество столбцов ColCount компонента больше 1, в левой верхней ячейке этого компонента (рисунок 12.11).

Во время прогона программы расположение компонентов в верхней строке (верхней левой ячейке) компонента TDBCtrlGrid и их состав будут реплицированы на все оставшиеся строки (ячейки), как это видно из рисунка 11.11.

Приемы работы с TDBCtrlGrid аналогичны приемам работы с TDBGrid. Текущая строка (ячейка) выделяется пунктирным прямоугольником. Для навигации по сетке компонента используются те же клавиши, что и для TDBGrid.

Для вставки новой записи необходимо нажать клавишу Insert или попытаться перейти с последней записи в НД вниз на одну строку (для сетки с одним столбцом).

Для изменения записи достаточно ввести новое значение в какое-либо поле.

Для удаления записи необходимо нажать комбинацию клавиш Ctrl+Detete.

На возможности редактирования, добавления и удаления записей в компоненте TDBCtrlGrid влияет ряд свойств самого компонента TDBCtrlGrid и компонент, размещенных в ячейках компонента TDBCtrlGrid.

Ниже приводится обзор некоторых свойств, методов и событий компонента TDBCtrlGrid.

Свойства компонента TDBCtrlGrid представлены в таблице 12.6.

Таблица 12.6 - Свойства компонента TDBCtrlGrid

Свойство Описание
property AllowDelete: boolean; Разрешает/запрещает удаление записей
property AllowInsert: boolean; Разрешает/запрещает вставку записей
property ColCount: integer; Определяет количество столбцов в сетке
type TDBCtrlGridOrientation = (goVertical, goHorizontal); property Orientation: TDBCtrlGridOrientation; Определяет ориентацию сетки: goVertical - вертикальная (по умолчанию); goHorizontal - горизонтальная (с горизонтальной полосой прокрутки)
type TDBCtrlGridBorder = fgbNone, gbRaised); property PanelBorder: TDBCtrlGridBorder; Тип рамки вокруг каждой ячейки: gbNone - нет рамки; gbRaised- выпуклая рамка
property PanelHeight: integer; Высота ячейки в пикселах
property PanelWidth: integer; Ширина ячейки в пикселах
propertyRowCount: integer; Определяет количество одновременно показываемых строк сетки
propertySelectedColor: TColor; Определяет цвет выделенной ячейки
property ShowFocus: boolean; Разрешает/запрещает обводить пунктирным прямоугольником ячейку с фокусом ввода

Для компонента TDBCtrlGrid определен метод DoKey:

type TDBCtrlGridKey = (gkNull, gkEditMode, gkPriorTab, gkKextTab, gkLeft,

gkRight, gkUp, gkDown, gkScrollUp, gkScrollDown,

gkPageUp, gkPageDown, gkHome, gkEnd, gkInsert,

gkAppend, gkDelete, gkCancel);

procedureDoKey (Key: TDBCtrlGridKey);

Действие, выполняемое методом, определяется параметром Key:

ü gkNull- ничего не делать;

ü gkEditMode - перевести компонент в режим редактирования;

ü gkPriorTab - передать фокус ввода предыдущей ячейке;

ü gkNextTab - передать фокус ввода следующей ячейке;

ü gkLeft - передать фокус ввода ячейке слева;

ü gkRight - передать фокус ввода ячейке справа;

ü gkUp - передать фокус ввода ячейке сверху;

ü gkDown - передать фокус ввода ячейке снизу;

ü gkScrollUp - прокрутить сетку на строку вверх;

ü gkScrollDown - прокрутить сетку на строку вниз;

ü gkPageUp - прокрутить сетку на экран вверх;

ü gkPageDown - прокрутить сетку на экран вниз;

ü gkHome - передать фокус ввода первой ячейке;

ü gkEnd - передать фокус ввода последней ячейке;

ü gklnsert - перевести компонент в режим редактирования;

ü gkAppend - перевести компонент в режим добавления записи;

ü gkDelete - перевести компонент в режим удаления записи;

ü gkCancel - восстановить режим просмотра.

Для компонента TDBCtrlGrid определены следующие события, аналогичные одноименным событиям сетки TDBGrid: OnClick, OnDblClick, OnDragDrop, OnDragOver, OnEndDrag, OnEnter, OnExit, OnKeyDown, OnKeyPress, OnKeyUp, OnStartDrag. Дополнительно введено событие, которое наступает для каждой ячейки TDBCtrlGrid перед ее отображением:

propertyOnPaintPanel: TPaintPanelEvent;

TPaintPanelEvent = procedure(DBCtrlGrid: TDBCtrlGrid; Index: integer) of object;

Обработчик этого события может управлять прорисовкой ячейки. Параметр TDBCtrlGrid показывает, какой именно компонент TDBCtrlGrid нуждается в прорисовке; параметр Index определяет индекс отображаемой ячейки.