Работа в режиме группировки данных.

Грид позвлояет группировать данные в памяти используя столбцы как критерии группировки.

Группировку можно создавать и менять как в Design так и RunTime режиме.

Группировка работает только когда грид подключен к датасету типа TMemTableEh.

При группировки грид также сортирует данные в MemTableEh чтобы они соответсвовали данным, по которым группируются записи. Грид динамически отслеживает изменения в записях и перемещает их в нужную группу, когда меняются ключевые для группировки поля записи. Используйте подсвойства свойства Grid.DataGrouping для управления группировками. Чтобы создать группировку используйте свойство Grid.DataGrouping.GroupLevels. GroupLevels это коллекция элементов типа TDBGridEhDataGroupLevelEh, каждый элементов которой отвечает за один уровень группироки. Ключевым свойством элемена коллекции явяется свойство ColumnName типа String. Это поле должно содержать имя колонки грида по полю Field которого будут группироваться записи. В run-time вы можете получить имя колонки, используя свойство TColumnEh.Name. Используйте свойства Font и Color элементов шаблона группировки для управления форматом отображения записей группироки. Для активизации группировки установите свойство Grid.DataGrouping.Active в True. Чтобы отобразить в гриде текущую структуру группироки уставновите свойство GroupPanelVisible в True. В верхней части грида отобразиться панель с активаными элеменатами шаблона группировки. Элемент коллекции шаблона группировки считается активным, когда в нем заполнено свойство ColumnName. После активизации панели группировки как в design-time так и в run-time становиться доступным формирование шаблона группировки методом drag-n-drop. Чтобы добавить новый столбец в шаблон группировки, перетащите его заголовок в панель группировки. При формировании дерева групп, грид создает новую группу в дереве, когда меняется значения в поле колонки Column.Field. Вы можете изменить ключевое значение формирования дерева групп в событии элемента шаблона TDBGridEhDataGroupLevelEh.OnGetKeyValue или в событии колонки TColumnsEh.OnGroupGetKeyValue. Текущее значение можно получить из поля GroupLevel.Column.Field.Value. Измененное значение необходимо присвоить параметру события KeyValue.

Например, следующее событие будет фомировать дерево групп сосотоящее только из двух записей ‘Big’ и ‘Small’.

procedure TForm1.gridFishColumns6GroupGetKeyValue(Sender: TCustomDBGridEh;

Column: TColumnEh; var KeyValue: Variant);

begin

if Column.Field.AsFloat > 100 then

KeyValue := 'Big'

else

KeyValue := 'Small';

end;

 

Грид использует ключевое значение при формировании строки отображения групповой записи. Если вы поменял значений ключа формирования дерева группировки, то возможно вам понадобиться поменять алгоритм перевода ключевого значения в стоку для отображения. Для этого используйте событие OnGetKeyValueAsText. Для переопределения алгоритма формирования текста строки группировки, используйте событие Grid.OnDataGroupGetRowText или GroupLevels.OnGetGroupRowText.

 

Для доступа к элемента сформированного дерева группировки используйте свойство Grid.DataGrouping.GroupDataTree. Свойство имеет тип TGridGroupDataTreeEh и наследуейтся от TTreeListEh. Элементы класса TTreeListEh формируют древовидную структуру групп и ссылки на записи для самого нижнего элемента группировки. Вы можете получить доступ к элементам в виде плоского списка используя подсвойтсва свойства FlatVisibleCount и FlatVisibleItem[Index]. Плоский массив FlatVisibleItem содержит только элементы, попадающие в области видимости раскрытых ветвей списка. Количетсво элементов массива соответсвует количеству текущих строк грида. Каждый элемент массива является экземпляром класса TGroupDataTreeNodeEh и задает ветвь дерева группировки. Основные свойтсва объекта это:

Count: Integer; Количетсво ветвей в группе. Ветвями могут являтся группы нижнего уровня или записи датасета.

DataGroup: TGridDataGroupLevelEh Указатель на шаблон группу. Если данная ветка является веткой уровня группой.

DataSetRecordViewNo: Integer. Номер записи в MemTableEh. Если данные ветка явлеятся веткой уровня записи.

Expanded: Boolean. Ветка раскрыта.

Items[Index: Integer]: TGroupDataTreeNodeEh. Массив веток нижнего уровня.

KeyValue: Variant;

Level: Integer Уровень ветки;

NodeType: TGroupDataTreeNodeTypeEh. Тип ветки. Ветка урованя группы или ветка уровня записи.

Parent. Указатель на родительскую ветку верхнего уровня.

Вы также можете обратиться к дереву группировки как массиву древовидной структуры. Для этого используйте свойство Items свойства Grid.DataGrouping.GroupDataTree. Каждый элемент массива является указателем на ветку дерева группировки самого верхнего уровня.

 

Свойство Grid.DataGrouping содержит следующие подсвойства:

Active: Boolean - Используйте это свойство для активизации группировки в гриде.

DefaultStateExpanded: Boolean - Задает значение Expanded для вновь создаваемых элементов дерева группировки.

GroupLevels: TGridDataGroupLevelsEh - Коллекция уровней группировки. Используйте это свойство для формирования шаблона построения дерева группировки.

GroupPanelVisible: Boolean - Установите это свойство в True чтобы отобразить панель группировки в верхней части грида. Когда панель видна, то имеется возможность формировать уровни группировки с помощью мыши, перетаскивая заголовки колонок грида в панель группировки.

Font: TFont - Задает шрифт записей группировки.

Color: TColor - Задает цвет закраски записей группировки.

 

При изменении структуры группировки срабатывает событие Grid.OnActiveGroupingStructChanged