Табличное представление данных

 
Компонент TDBGrid

Этот компонент инкапсулирует двумерную таблицу, в которой строки представляют собой записи, а столбцы — поля набора данных.

Компонент TDBGrid является потомком классов TDBCustomGrid И TCustomGrid.

От класса TCustomGrid наследуются все функции отображения и управления работой двумерной структуры данных. Класс TDBCustomGrid обеспечивает визуализацию и редактирование полей из набора данных, причем TDBGrid только публикует свойства и методы класса TDBCustomGrid, не добавляя собственных.

В компоненте TDBGrid можно отображать произвольное подмножество полей используемого набора данных, но число записей ограничить нельзя — в компоненте всегда присутствуют все записи связанного набора данных. Требуемый набор полей можно составить при помощи специального Редактора столбцов, который открывается при двойном щелчке на компоненте, перенесенном на форму, или кнопкой свойства columns в Инспекторе объектов.

Новая колонка добавляется при помощи кнопки Add New, после этого ее название появляется в списке колонок (рис. 15.2). Для выбранной в списке колонки доступные для редактирования свойства появляются в Инспекторе объектов. Колонки в списке можно редактировать, удалять, менять местами.

При помощи кнопки Add All Fields в сетку можно добавить все поля набора данных.

Каждая колонка компонента TDBGrid описывается специальным классом TColumn, а совокупность колонок доступна через свойство columns компонента, оно имеет тип TDBGridColumns и представляет собой индексированный список объектов колонок. Поле набора данных связывается с конкретной колонкой при помощи свойства FieldName класса TColumn. При этом в колонку автоматически переносятся все необходимые параметры поля, в частности заголовок поля, настройки шрифтов, ширина поля. После ручного изменения параметров первоначальные значения восстанавливаются методами соответствующих объектов Icolumn.

Рис. 15.2. Редактор колонок компонента TDBGrid

 При метода метода DefaultDrawColumnCell  и метода- обработчика OnDraw-CoiumnCell можно управлять процессом отображения данных в ячейках.

Метод DefauitorawDataCelll предназначен только для обеспечения обратной совместимости по коду с более ранними версиями.

Настройка параметров компонента TDBGrid, от которых зависит его внешний вид и некоторые функции, осуществляется при помощи свойства options (табл. 15.2). Текущая позиция в двумерной структуре данных может быть определена свойствами SelectedField, SelectedRows, Selectedlndex.

При необходимости разработчик может использовать разнообразные методы-обработчики событий. Среди них есть как стандартные методы, присущие всем элементам управления, так и специфические.

Например, при помощи метода-обработчика OnEditButtonClick можно предусмотреть вызов специализированной формы при щелчке на кнопке в ячейке:

procedure TForml.DBGridlEditButtonClick(Sender: TObject); 

begin

if DBGridl.Selectedlndex = 2 then SomeForm.ShowModal; 

end;

 Примечание

Объект колонки TColumn имеет свойство ButtonStyle. Если ему присвоить значение cbsEllipsis, то при активизации ячейки этой колонки в правой части ячейки появляется кнопка.

Таблица 15.2. Свойства и методы компонента WBGrid

Объявление

Тип

Описание

Свойства

property Columns:  TDBGridColumns; 

Pb

Содержит коллекцию объектов TColumn, описывающих колонки компонента

property DefaultDrawing: Boolean; 

 

Pb

Определяет способ визуализации данных в сетке. При значении True данные отображаются автоматически. При значении False используется метод-обработчик OnDrawColumnCell

property FieldCount: Integer; 

Ro

Возвращает число видимых колонок сетки

property Fields [Index: Integer] : TField; 

Ro

Массив объектов полей набора данных, отображаемых в компоненте

TDBGridOption = (dgEditing,  dgAlwaysShowEditor,  dgTitles, dglndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection,  dgConfirmDelete, dgCancelOnExit, dgMultiSelect) ;

TDBGridOptions = set of TDBGridOption; 

Pb

Определяет особенности визуализации и поведения компонента:

  •  dgEditing — данные можно редактировать;
  •  dgAlwaysShowEditor — данные в сетке всегда в режиме редактирования;
  •  dgTitles — видны заголовки колонок;
  •  dglndicator — в начале строки виден номер текущей колонки;
  •  dgColumnResize — колонки можно перемещать и менять их ширину;
  •  dgColLines — видны линии между колонками;
  •  dgRowLines — видны линии между строками;
  •  dgTabs — для перемещения по строкам можно использовать клавиши <Таb> и <Shift>+<Tat»;
  •  dgRowSelect — можно выделять целые строки, при этом игнорируются установки dgEditing И dgAlwaysShowEditor;
  •  dgAlwaysShowSelection — выделение текущей ячейки сохраняется, даже если сетка не активна;
  •  dgConfirmDelete — при удалении строк появляется запрос о подтверждении операции;
  •  dgCancelOnExit — созданные пустые строки при уходе из сетки не сохраняются;

  •  dgMultiSelect — можно выделять несколько строк одновременно

property SelectedField: TField;

Pu

Содержит объект текущего поля

property Selectedlndex: Integer;

Pu

Содержит номер текущей колонки в массиве свойства Columns

property SelectedRows: TBookmarkList;

Ro

Набор закладок на записи набора данных, соответствующих выделенным строкам сетки

property TitleFont: TFont;

Pb

Шрифт заголовков колонок

property EditorMode: Boolean;

Pu

Показывает, можно ли редактировать текущую ячейку

property FixedColor: TColor;

Pb

Цвет фона неподвижных ячеек сетки

Методы

procedure DefaultDrawColumnCell (const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState) ;

Pu

Перерисовывает текст в ячейке колонки с номером DataCol. Ячейка задается прямоугольником Rect на канве сетки. Параметр state определяет состояние ячейки после перерисовки. Параметр Column содержит экземпляр класса колонки, которой принадлежит ячейка

procedure DefaultDrawDataCell (const Rect: TRect; Field: TField; State: TGridDrawState);

Pu

Перерисовывает текст в ячейке колонки, определяемой параметром Field, содержащим связанный с колонкой объект поля. Ячейка задается прямоугольником Rect на канве сетки. Параметр State определяет состояние ячейки после перерисовки

procedure Def aultHandler (var Msg); override;

Pu

Вызывает всплывающее меню для колонки, которой соответствуют текущие координаты мыши. Компонент должен обрабатывать сообщение WM RBUTTONUP

function ExecuteAction (Action: TBasicAction): Boolean; override;

Pu 

Выполняет действие, заданное параметром Action, по отношению к данному  компоненту

procedure  ShowPopupEditor (Column: I TColumn; X: Integer = Low (Integer); Y: Integer = Low (Integer) ); dynamic; 

Pu 

Открывает набор данных, связанный с передаваемой параметром Column колонкой в новом окне. Работает только для типов данных абстрактный и набор данных. Параметры X и Y определяют положение нового окна

function | ValidFieldlndex (Fieldlndex:  Integer) : Boolean; 

Pu

Возвращает значение True, если колонка с номером Fieldlndex связана с полем набора данных

type TGridCoord = record  X: Longint;Y: Longint; end; 

function MouseCoord(X, Y:  Integer): TGridCoord; ;

Pu 

Возвращает номера строки и столбца, соответствующие ячейке, которой принадлежат экранные координаты X и Y

Методы-обработчики событий

type TDBGridClickEvent =  procedure (Column: TColumn) 1 of object;

property OnCellClick: TDBGridClickEvent; 

Pb

Вызывается при щелчке мышью на ячейке. Параметр Column содержит колонку, которой принадлежит ячейка

property OnColEnter:  TNotifyEvent;

Pb

Вызывается при переносе фокуса на новую колонку сетки

property OnColExit:  TNotifyEvent; 

Pb 

Вызывается перед переносом фокуса из текущей колонки

type TMovedEvent = procedure  (Sender: TObject;  Froinlndex, Tolndex:  Longint) of object; 

property OnColumnMoved: 

TMovedEvent ;

Pb 

 

Вызывается при переносе колонки в сетке на новое место при помощи мыши. Параметр Fromindex возвращает номер старого положения колонки. Параметр Tolndex возвращает номер нового положения колонки

type

TDrawColumnCellEvent =  procedure (Sender: TObject;  const Rect : TRect; DataCol : State: TGridDrawState)  of object; 

property OnDrawColurnnCell :  TDrawColumnCellEvent; 

Pb 

Вызывается при перерисовке ячейки.

Параметр Rect определяет ячейку по координатам прямоугольника на канве.

Параметр DataCol возвращает номер колонки в сетке.

Параметр Column содержит объект колонки.

Параметр State возвращает состояние колонки

type

TDrawDataCellEvent = procedure (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState) of object;

property OnDrawDataCell: TDrawDataCellEvent;

Pb

I Вызывается при перерисовке ячейки | перед обработчиком OnDrawCoiumnCell,  если свойство Columns. State =csDefault.

 Этот метод лучше не применять, т. к. он  используется только для обеспечения обратной совместимости с ранними версиями

property OnEditButtonClick: TNotifyEvent;

Pb

1 Вызывается при щелчке мышью на кнопке в ячейке

type TDBGridClickEvent = procedure (Column: TColumn) of object;

property OnTitleClick: TDBGridClickEvent;

Pb 

| Вызывается при щелчке мышью на заголовке колонки. Колонка определяется параметром Column

В работе компонента TDBGrid важную роль играет класс TColumn, который инкапсулирует свойства колонки или столбца сетки (табл. 15.3). Его основным назначением является правильное отображение данных из поля набора данных, связанного с этой колонкой. Поэтому объект колонки обладает свойствами и методами, которые позволяют произвольным образом задавать параметры отображения данных (цвет, шрифт, ширину и т. д.). Первоначальные значения берутся из связанных с колонками полей. Измененные свойства можно восстановить при помощи группы специальных методов (DefauitColor, DefaultFont И др.).

Свойство Assignedvalues позволяет в любой момент определить, какие первоначальные настройки были изменены.

За отображение заголовка колонки отвечает свойство Title, представляющее собой ссылку на экземпляр объекта TColumnTitie. Здесь можно задать текст заголовка, параметры шрифта текста заголовка и цвет фона заголовка. По умолчанию текст заголовка берется из свойства DispiayLabel объекта TField (CM. гл. 13).

Каждой колонке можно придать список, который разворачивается при щелчке на кнопке в активной ячейке колонки. Выбранное в списке значение автоматически заносится в ячейку. Для реализации этой возможности применяется свойство pickList типа TStrings. Достаточно лишь заполнить список значениями во время разработки или выполнения (рис. 15.3).

Рис. 15.3. Список колонки в компоненте TDBGrid

Таблица 15.3. Свойства и методы класса TColumn

Объявление

Тип

Описание

Свойства

property Alignment: TAlignment;

Pb

 Определяет выравнивание данных  в колонке

type 

TColumnValue = (cvColor, cvWidth, cvFont, cvAlignment, cvReadOnly, cvTitleColor, cvTitleCaption, cv'i'itleAlignment, cvTitleFont, cvImeMode, cvImeName) ; TColuinnValues = set of TColumnValue;

property AssignedValues: TColuranValues ;

Ro

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

 

type TColumnButtonStyle = (cbsAuto, cbsEllipsis, cbsNone) ;

property ButtonStyle: TColumnButtonStyle;

Pb

Задает способ редактирования  данных в колонке:

  •  cbsAuto — кнопка в редактируемой ячейке появляется, если  связанное поле является полем  синхронного просмотра;
  •  cbsEllipsis — кнопка в редактируемой ячейке появляется всегда,  щелчок на кнопке вызывает  обработчик OnEditButtonClick;
  •  cbsNone — при редактировании ячейки кнопка не появляется

property Color: TColor;

Pb 

Цвет фона колонки

property DisplayName: string;

Pu

Название колонки в списке Редактора столбцов

property DropDownRows: Cardinal;

Pb 

Определяет число строк разворачивающегося списка ячейки

property Expandable: Boolean;

Pu

В значении True разрешает показ связанных с полем колонки дочерних полей абстрактного, ссылочного типов и массивов

property Expanded: Boolean;

Pb 

При значении True каждое дочернее поле отображается в новой колонке. При значении False дочерние поля отображаются через точку с запятой и не доступны для редактирования

property FieldName: string;

Pb

Название поля, связанного с колонкой

property Font: TFont;

Pb

Шрифт данных в колонке

property Grid: TCustomDBGrid;

Ro

Определяет сетку, содержащую эту колонку

property ParentColumn: TColumn;

Ro

Определяет колонку-владельца текущей колонки. Используется для дочерних полей

property PickList: TStrings;

Pb

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

property PopupMenu: TPopupMenu;

Pb

Связывает с колонкой всплывающее меню

property Showing: Boolean;

Ro

Возвращает значение True, если колонка видима

property Title: TColumnTitle;

Pb

Задает текст заголовка и его параметры

property Visible: Boolean;

Pb

Задает видимость колонки

property Width: Integer;

pb

Задает ширину колонки в пикселах

Методы

procedure Assign (Source: TPersistent); override;

Pu

Копирует колонку Source в текущую колонку

function Def aultAlignment: TAlignment;

Pu

Возвращает первоначальное значение выравнивания колонки

function DefaultColor: TColor;

Pu

Возвращает первоначальный фоновый цвет колонки

function DefaultFont: TFont;

Pu

Возвращает первоначальный шрифт данных в колонке

type TIraeMode = (imDisable, iraClose, imOpen, imDontCare, imSAlpha, imAlpha, imHira, imSKata, irnKata, imChinese, imSHanguel, imHanguel); function DefaultlmeMode: TImeMode;

Pu

Возвращает первоначальный способ ввода символов

type TImeName = type string;

function DefaultlmeName: TImeName;

Pu

Возвращает первоначальное имя редактора способа ввода символов

function DefaultReadOnly: Boolean;

Pa

: Возвращает первоначальный режим  редактирования данных

function DefaultWidth: Integer;

Pu

Возвращает первоначальную ширину  колонки в пикселах

function Depth: Integer;

Pu

; Возвращает число непосредственных  предков колонки

procedure RestoreDefaults; virtual;

Pu

i Восстанавливает первоначальные  настройки колонки

При работе с компонентом TDBGrid все операции с отдельными колонками осуществляются при помощи экземпляра класса TDBGridColumns, который инкапсулирует список объектов колонок (свойство Columns компонента TDBGrid). Доступ к колонкам осуществляется при помощи свойства items. Нумерация колонок начинается с нуля.

При помощи свойств и методов класса TDBGridColumns можно изменять настройки полей компонента TDBGrid во время выполнения (табл. 15.4).

Свойство state определяет способ создания колонок. Его значение устанавливается автоматически. При создании колонок для всех полей сразу (кнопка Add All Fields Редактора столбцов) устанавливается значение csDefault.

При любом ручном изменении свойств устанавливается значение csCustomized. При программном изменении значения свойства во время выполнения все существующие колонки удаляются.

Все данные из существующих колонок можно сохранить в файле или потоке при помощи методов SaveToFile и saveToStream, а затем загрузить их обратно методами LoadFromFile И LoadFromStream.

Таблица 15.4. Свойства и методы класса TDBGridColumns

Объявление

Тип

Описание

Свойства

property Grid: TCustomDBGrid;

Ro

Возвращает ссылку на сетку, владеющую данным объектом

property Items [Index: Integer] : TColumn default;

Pu

Индексный список объектов колонок сетки:

type TDBGridColumnsState = (csDefault, csCustomized) ;

property State: TDBGridColumnsState;

Pu

Определяет способ создания колонок сетки:

  • csDefault — колонки создаются динамически с параметрами, соответствующими связанным полям;
  •  csCustomized — параметры колонок определены разработчиком и могут отличаться от параметров полей

property Count: Integer;

Pu

Возвращает общее число колонок

Методы

function Add: TColumn;

Pu

Добавляет новый объект TColumn

procedure LoadFromFile (const Filename: string);

Pu

Загружает данные в объект из файла FileName

procedure LoadFromStream(S: TStream) ;

Pu 

Загружает данные в объект из потока s

procedure RebuildColumns;

Pu

Удаляет существующие колонки и создает новые, основываясь на параметрах полей набора данных

procedure RestoreDefaults;

Pu

Восстанавливает первоначальные настройки колонок

procedure SaveToFiie (const Filename: string);

Pu

Сохраняет данные из колонок в файле FileName

procedure SaveToStream(S: TStream) ;

Pu

Сохраняет данные из колонок в потоке s