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