FastGrid изнутри: объект View, колонки и события компонента сетки Delphi

23.10.2026

В предыдущей статье мы сделали обзор основных возможностей FastGrid — компонента сетки для Delphi из состава FastReport VCL. Теперь спустимся на уровень ниже и разберём внутреннее устройство компонента: изучим свойства сетки и визуальных элементов, из которых она состоит, рассмотрим объект View, колонки, их свойства и события, а в конце кратко коснёмся настройки работы с данными.

Материал будет полезен разработчикам на Delphi и C++ Builder, которые используют FastGrid в составе FastReport VCL или только планируют его освоить.

 


 

Сетка — базовый элемент управления

Сетка (TfrGrid) — основной контрол, на котором располагаются все остальные объекты, обеспечивающие её функционирование. Практически все свойства и события компонента стандартны и присутствуют у большинства элементов управления VCL. Исключение — два специфичных для сетки события:

  • OnActiveViewChanging(Sender: TObject; AView: TfrGridCustomView; var AAllow: Boolean) — возникает перед изменением текущего активного View и позволяет запретить его активацию.
  • OnActiveViewChanged(Sender: TObject) — возникает после изменения активного View.

Добавление и удаление различных View на сетку осуществляется с помощью меню компонента. При создании сетки в неё автоматически добавляется один объект View.

 


 

Легенда сетки

В дизайн-тайме на сетке также располагается легенда — небольшой список объектов, находящихся на сетке. В ней доступно меню не только для сетки, но и для расположенных на ней компонентов (колонок). Кроме того, легенда позволяет быстро активировать любой из этих компонентов. Если легенда не нужна, её можно убрать, установив у сетки свойство ShowLegend := False.

Легенда сетки

 


 

Объект View — основа отображения данных

Объект View — основной элемент сетки, отвечающий за отображение её содержимого. Управлять объектами View можно с помощью легенды. В меню каждого View доступны следующие опции (в Unbound View некоторые из них отсутствуют):

  • Link To DataSource — связывает View с одним из доступных DataSource. При этом в сетке создаются все поля, имеющиеся в связываемом DataSource, и удаляются отсутствующие (недоступно в Unbound).
  • Add Column — добавляет новую колонку, не связанную с данными.
  • Add Missing Columns — добавляет колонки, которые есть в связанном DataSet, но отсутствуют во View (недоступно в Unbound).
  • Delete All Columns — удаляет все колонки из сетки.
  • Delete — удаляет View.

 


 

Свойство Appearance: единая точка настройки внешнего вида

При работе со сложными элементами управления вы постоянно сталкиваетесь с большим количеством свойств типа Color и Font, а также со свойствами вида ParentFont. В FastGrid все эти свойства спрятаны внутрь свойства Appearance. Оно состоит из вложенных свойств, каждое из которых отвечает за внешний вид той или иной части сетки.

Рассмотрим работу этих свойств на примере Appearance.Data — оно отвечает за внешний вид области данных сетки.

Развёрнутое свойство Appearance.Data

Как видно на скриншоте, это свойство состоит из вложенных свойств вида BackgroundColor, FontColor, FontName и набора флагов в подсвойстве AssignedValues с теми же именами. Принцип работы такой: с помощью AssignedValues мы указываем, что именно из набора простых свойств применяется непосредственно, а что наследуется от родительского объекта. Например, если установить AssignedValues.FontColor в True, то при изменении цвета шрифта у сетки цвет шрифта в области данных не изменится.

Свойства Appearance в основном применяются для настройки шрифта и цвета содержащих их объектов. Иными словами, они заменяют собой ParentColor, ParentFont и другие свойства со сходным поведением, но дают больше гибкости: часть параметров можно переопределить локально, а остальное наследовать от сетки.

Проверим, как это работает, на демо-проекте FastGrid. Откроем в Delphi проект GridDemo.dpr — он находится в меню «Пуск» в папке «FastReport VCL Products», в подпапке «2026.2.0-Sources-Demos» (номер версии в названии папки может отличаться; кроме того, в IDE должна быть установлена версия FastReport, в состав которой входит FastGrid). Откроем модуль DataAvareDemo.pas и перейдём к форме. Изменим некоторые вложенные свойства Appearance. Получилось так:

Изменённые свойства Appearance в демо-проекте

А теперь установим непосредственно у сетки свойство Font.Name := 'Courier New'. Такой шрифт выбран для наглядности. Внешний вид сетки станет таким:

Сетка со шрифтом Courier New

Мы видим, что шрифт изменился у всех текстовых элементов сетки, однако цвет и атрибуты остались прежними. А у колонки City шрифт остался без изменений — мы установили его непосредственно у колонки. Такой подход позволяет более гибко управлять отображением содержимого сетки. Отметим: по умолчанию все AssignedValues установлены в False, то есть значения почти всех параметров берутся из сетки.

 


 

Свойства View

Все свойства объекта View сгруппированы в несколько групп.

Active — позволяет задать активность текущего View.

Appearance — определяет внешний вид объекта View. Если в AssignedValues соответствующий параметр установлен в False, значение берётся непосредственно из сетки:

  • Data — определяет вид области данных.
  • Group — определяет свойства групп, расположенных в области данных.
  • GroupArea — определяет свойства области группировки.
  • Header — определяет свойства заголовков колонок.

DataController — свойство, задающее доступ к данным. Подробнее рассмотрим его в следующей статье.

OptionsBehavior — определяет поведение сетки. Вложенные свойства:

  • ConfirmDelete — операции удаления требуют подтверждения в диалоговом окне.
  • UseCilunmCaptionsForGroupNames — если установлено, то при группировке в области данных группы выводятся также с заголовком колонки.
  • WantTabs — кнопка Tab вызывает переход к следующей колонке сетки, а не к следующему контролу формы.

OptionsCustomization — разрешает пользователю те или иные операции: фильтрацию, группировку и сортировку данных; скрытие, перемещение и изменение размеров колонок и другие. Эти операции могут быть перекрыты аналогичным свойством для каждой колонки.

OptionsData — разрешает пользователю выполнять операции с данными сетки: вставку, добавление, удаление и редактирование.

OptionsDataNavigator — позволяет настроить навигатор данных: его позицию, прилегание к сторонам сетки, а также размер кнопок, их внешний вид и набор отображаемых кнопок.

OptionsView — позволяет настраивать внешний вид сетки. Рассмотрим некоторые подсвойства подробнее:

  • EditButtonsVisibility — определяет показ кнопок при редактировании сетки:
    • ebvActiveCell — только у текущей редактируемой ячейки;
    • ebvActiveRow — в ячейках текущей активной строки;
    • ebvAlways — у всех ячеек, в которых есть кнопки.
    • По умолчанию — ebvActiveCell.
  • GroupRowHeight, HeaderHeight, RowHeight — высота строки группы, заголовка и строки данных соответственно. Если установлено 0 (по умолчанию), высота рассчитывается исходя из высоты установленного шрифта.
  • ShowColumnListButton — разрешает показ списка колонок для скрытия; кнопка находится в верхнем левом углу сетки. По умолчанию показ разрешён. С помощью этого списка пользователь в режиме выполнения может управлять видимостью колонок сетки.

Редактор списка колонок

  • ShowDataNavigator — показ навигатора данных. Сами свойства навигатора находятся в OptionsDataNavigator. По умолчанию навигатор не показывается.
  • MergedGroupSeparator — разделитель, который используется, если группа организуется из нескольких полей: в этом случае значения полей разделяются значением этого свойства.

Разделитель групп — дефис

  • ShowGroupingArea — разрешает показ области группировки. В эту область можно перетаскивать заголовки колонок, чтобы группировать данные по содержимому колонок. По умолчанию область показывается. Отметим, что для выполнения группировки её видимость не обязательна: она нужна только для того, чтобы группировку мог выполнить пользователь программы.
  • ShowHeaders — разрешает показ заголовков колонок (по умолчанию включено).
  • ShowIndicator — разрешает показ индикатора данных (по умолчанию включено).
  • Visible — определяет видимость View.

 


 

Работа с View из кода

С объектами View можно работать и из кода. Создать новый объект можно следующей конструкцией: frGrid.Views.CreateView(TfrGridTableView).

Для удаления — удалить View из списка Views сетки (frGrid.Views.Remove(View)) или просто вызвать View.Free. Если требуется программно переключиться на другой View, достаточно установить у него View.Active := True.

Определить текущий активный столбец View можно с помощью свойства View.Controller.FocusedColumnIndex.

У объекта View предусмотрено множество событий, которыми программист может воспользоваться: как стандартные, например OnKeyDown, так и специфичные для сетки — их назначение в целом понятно из названий. Интересная особенность набора событий View (и не только его) — наличие у некоторых событий параметра var AAllow: Boolean. Установив этот параметр в False в обработчике события, программист легко запретит то или иное действие. Например, если установить его в обработчике OnEditing, мы запретим переход в режим редактирования для текущей ячейки.

 


 

События View

Рассмотрим некоторые из событий View подробнее.

  • OnCellClick(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean) — возникает при клике мышью на ячейку. Если установить AHandled в True, обработчик колонки не будет вызван, а встроенный редактор не откроется. Такое поведение может пригодиться, чтобы запретить редактирование ячеек при некоторых условиях или организовать редактирование значений ячеек альтернативными способами.
  • OnEditing(Sender: TObject; AItem: TfrGridViewItem; ARowIndex: Integer; var AAllow: Boolean) — возникает при переходе ячейки в режим редактирования. При установке AAllow := False редактирование ячейки будет запрещено.
  • OnFilterPopupDropDown(Sender: TObject; AItem: TfrGridViewItem; APopupWindow: TfrGridItemFilterPopupWindow) — возникает, когда пользователь нажимает пиктограмму фильтра в заголовке колонки. APopupWindow — окно с информацией о фильтрах, которое будет показано пользователю.
  • OnFilterPopupCloseUp(Sender: TObject; AItem: TfrGridViewItem) — возникает по завершении работы пользователя с ниспадающим списком фильтров.
  • OnGetCellBackgroundColor(Sender: TObject; AItem: TfrGridItem; ARowIndex: Integer; var AColor: TColor) — позволяет задать цвет фона ячейки сетки.

У этих событий есть общие элементы. Во всех обработчиках параметр AItem — это ссылка на колонку таблицы, а ARowIndex — номер строки данных в связанном с сеткой DataController.

 


 

Колонки: свойства и события

View содержит в себе набор колонок. Колонки можно добавлять как в редакторе форм IDE, так и во время выполнения программы. Рассмотрим основные свойства колонки.

Appearance — определяет внешний вид колонки:

  • Data — определяет внешний вид области данных колонки. Если AssignedValues = False, значения берутся из одноимённого свойства View.
  • Header — определяет внешний вид заголовка колонки. Если AssignedValues = False, значения берутся из одноимённого свойства View.

Caption — заголовок колонки.

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

GroupIndex, MergedGroupIndex — индекс группы, в которой находится колонка, и индекс колонки в этой группе. По умолчанию равны -1 (колонка не входит в группу). Изменяя эти свойства, можно напрямую управлять группировкой в сетке — создавать и удалять группы. Если показ области группировки разрешён, пользователь в режиме выполнения может создавать и удалять группы самостоятельно: достаточно перетащить заголовок колонки в область группировки. Колонка при этом исчезнет из списка видимых, но данные в сетке будут сгруппированы по значению поля этой колонки. Отметим, что сетка всегда выполнит сортировку по этой колонке.

Группировка может быть многоуровневой — просто перетащите требуемые заголовки колонок. А если перетаскивать заголовок колонки с нажатой клавишей Ctrl, можно создать группу, основанную на нескольких колонках. Если группировка больше не нужна, перетащите заголовок колонки из области группировки обратно в сетку.

Index — видимый индекс колонки на экране. Изменяя это свойство, можно напрямую изменять положение колонки в сетке.

MinWidth — минимальная ширина колонки. Обратите внимание: по умолчанию это значение равно не 0, а 20.

Options — это свойство позволяет настроить, какие именно действия может производить пользователь с колонкой: переводить её в режим редактирования, фильтровать по данным колонки, группировать, скрывать колонку, изменять её размеры, перемещать её, изменять данные колонки, сортировать, а также показывать её в списке колонок. Как видно, этот список действий практически аналогичен тому, который находится в View.OptionsCustomization.

Properties — с помощью этого свойства можно задать редактор для использования в колонке. Если свойство не задавать, сетка попробует подобрать редактор на основании типа данных колонки. А если присвоить этому свойству значение из выпадающего списка, после этого его можно будет раскрыть и настроить свойства заданного редактора. Подробнее редакторы будут рассмотрены в отдельной статье. Пока отметим, что редактор отвечает не только за редактирование значения одной ячейки, но и за отображение значений всей колонки. Редакторы также доступны и как отдельные компоненты. Заметим, что доступ к свойствам редактора возможен только в том случае, если редактор задан явно: для редакторов по умолчанию возможность настройки свойств отсутствует.

SortOrderIndex, SortOrder — этими свойствами можно задать сортировку полей сетки. Поле SortOrderIndex отвечает за приоритет поля при сортировке: сначала производится сортировка по полю с SortOrderIndex = 0; если значения в этой колонке совпадут, то сортируем по колонке с SortOrderIndex = 1. Если задать SortOrderIndex = -1, сортировка по этой колонке не производится.

Свойство SortOrder определяет порядок сортировки: soNone — не сортируем, soAscending — сортировка по возрастанию, soDescending — по убыванию. Заметим, что задать сортировку колонок пользователь может и во время выполнения: достаточно щёлкнуть по заголовку колонки левой кнопкой мыши. При повторном щелчке порядок сортировки изменится на обратный. Сортировка будет выполняться по той колонке, на заголовок которой был выполнен щелчок. Для отмены сортировки достаточно щёлкнуть по заголовку колонки с нажатой клавишей Ctrl. А если при щелчке удерживать нажатой клавишу Shift, можно осуществить сортировку сразу по нескольким колонкам.

 


 

Колонки из кода

Создать колонку из кода можно с помощью метода View.Columns.CreateColumn. Задать ей редактор можно, присвоив свойству Column.PropertiesAlias строку с именем редактора или задав свойству Column.PropertiesClass тип класса редактора.

Очистить список колонок у View можно с помощью метода View.Columns.Clear. Также могут оказаться полезными свойства Columns.VisibleCount и Columns.VisibleItems — с их помощью можно получить доступ только к видимым колонкам, причём сами колонки в этом списке будут упорядочены по их положению на экране.

 



События колонки

Рассмотрим события колонки данных. Как уже упоминалось, некоторые события колонки аналогичны событиям View.

  • OnCellClick(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean) — возникает при клике на ячейке.
  • OnGetCellBackgroundColor(Sender: TObject; ARowIndex: Integer; var AColor: TColor) — позволяет задать цвет фона ячейки.
  • OnGetDisplayValue(Sender: TObject; ARowIndex: Integer; var AValue: Variant) — позволяет получить значение для отображения в ячейке.
  • OnGetFilterDisplayText(Sender: TObject; const AValue: Variant; var AText: string) — позволяет получить значение для отображения в списке фильтрации.
  • OnGetHeaderBackgroundColor(Sender: TObject; var AColor: TColor) — позволяет задать цвет фона заголовка колонки.

 


 

Настройка работы с данными: режимы DB и Unbound

В заключение статьи кратко рассмотрим настройку сетки на работу с данными на уровне задания свойств. Как мы уже знаем, сетка может работать с данными в двух режимах: DB и Unbound.

Режим DB

В режиме DB сетка связывается с данными, используя стандартный компонент TDataSource, аналогично тому, как это делает, например, стандартный компонент TDBGrid. После задания в инспекторе объектов View.DataController := 'DB' можно раскрыть это свойство и указать требуемый TDataSource. А после задания DataSource можно пройтись по колонкам и в свойстве DataBinding.FieldName каждой колонки указать имя требуемого поля данных. Свойство DataBinding.FieldType изменить нельзя — его значение берётся из связанного поля данных DataSource.

Режим Unbound

В режиме Unbound сетка работает немного иначе. После задания View.DataController := 'Unbound' сетка переходит в режим работы с данными, которые хранятся в самой сетке. Чтобы определить колонки набора данных, сначала нужно создать их — например, из всплывающего меню View в легенде, — затем перейти к объектам колонок и в поле DataBinding.FieldName каждой колонки задать имя поля данных, а в поле DataBinding.FieldType — тип поля данных. После этого во внутреннем хранилище сетки создаётся соответствующий набор полей, с которым можно работать.

 


 

Заключение

Мы разобрали внутреннее устройство FastGrid: роль сетки как базового контрола, объект View и его свойства, механизм Appearance с подсвойством AssignedValues, колонки с их настройками и событиями, а также два режима работы с данными — DB и Unbound. Этого достаточно, чтобы настраивать внешний вид и поведение сетки как в дизайн-тайме, так и из кода.

Остался последний крупный вопрос — работа с данными: DataController, привязка DataSource, редактирование и навигация по записям. Именно его мы подробно рассмотрим в следующей статье цикла.

FastGrid Delphi FastReport VCL
26 октября 2026

Прогресс-бар в Delphi: компоненты TfrProgressBar и TfrxProgressBar из FastReport VCL

Разбираем компоненты TfrProgressBar и TfrxProgressBar из FastReport VCL: настройка шкалы прогресса, пороги и маркеры, привязка к данным и пример на Delphi.
26 октября 2026

TfrImageComboBox: выпадающий список с изображениями и текстовыми подписями в FastReport VCL

TfrImageComboBox из FastEditors VCL: выпадающий список с иконками и подписями для FastReport VCL. Свойства, события и примеры использования в Delphi.
21 октября 2026

Как настроить OLAP в Delphi и использовать срезы данных для решения аналитических задач

Создаём BI‑аналитику в Delphi: разбираем пошаговую настройку FastGrid и FastCube (OLAP) для многомерных отчётов и анализа данных без сложных SQL‑запросов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»