Grouping hierarchy can be displayed in the grid in different ways.
Display Types Copy Link
The row hierarchy can be shown in three different ways, configured by the groupDisplayType grid option:
- A Single Group Column containing all row group levels.
- Multiple Group Columns with each column representing a row group level.
- Group Rows where parent rows are displayed as full width rows.
import { Component } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { AgGridAngular } from "ag-grid-angular";
import "./styles.css";
import {
AutoGroupColumnDef,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
RowGroupingDisplayType,
enableDevValidations,
} from "ag-grid-community";
import { RowGroupingModule } from "ag-grid-enterprise";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([ClientSideRowModelModule, RowGroupingModule]);
import { IOlympicData } from "./interfaces";
@Component({
selector: "my-app",
standalone: true,
imports: [AgGridAngular],
template: `<div class="example-wrapper">
<div class="example-header">
<label>
<span>groupDisplayType:</span>
<select id="input-display-type" (change)="onDisplayTypeChange()">
<option value="singleColumn">"singleColumn"</option>
<option value="multipleColumns">"multipleColumns"</option>
<option value="groupRows">"groupRows"</option>
</select>
</label>
</div>
<ag-grid-angular
style="width: 100%; height: 100%;"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[autoGroupColumnDef]="autoGroupColumnDef"
[groupDefaultExpanded]="groupDefaultExpanded"
[rowData]="rowData"
(gridReady)="onGridReady($event)"
/>
</div> `,
})
export class AppComponent {
private gridApi!: GridApi<IOlympicData>;
columnDefs: ColDef[] = [
{ field: "country", rowGroup: true, hide: true },
{ field: "year", rowGroup: true, hide: true },
{ field: "athlete" },
{ field: "sport" },
{ field: "gold" },
{ field: "silver" },
{ field: "bronze" },
];
defaultColDef: ColDef = {
flex: 1,
minWidth: 100,
};
autoGroupColumnDef: AutoGroupColumnDef = {
minWidth: 200,
};
groupDefaultExpanded = 1;
rowData!: IOlympicData[];
constructor(private http: HttpClient) {}
onDisplayTypeChange() {
const displayType = (
document.querySelector("#input-display-type") as HTMLSelectElement
).value as RowGroupingDisplayType;
this.gridApi.setGridOption("groupDisplayType", displayType);
}
onGridReady(params: GridReadyEvent<IOlympicData>) {
this.gridApi = params.api;
this.http
.get<
IOlympicData[]
>("https://www.ag-grid.com/example-assets/olympic-winners.json")
.subscribe((data) => (this.rowData = data));
}
}
.example-wrapper {
display: flex;
flex-direction: column;
height: 100%;
}
#myGrid {
flex: 1 1 0px;
width: 100%;
}
.example-header {
margin-bottom: 5px;
}
import '@angular/compiler';
import { provideHttpClient } from '@angular/common/http';
import { enableProdMode } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
if (new URLSearchParams(window.location.search).get('prod') !== 'false') {
enableProdMode();
}
const app = bootstrapApplication(AppComponent, {
providers: [provideHttpClient()],
});
export interface IOlympicData {
athlete: string,
age: number,
country: string,
year: number,
date: string,
sport: string,
gold: number,
silver: number,
bronze: number,
total: number
} To configure the display type, set the groupDisplayType property in the grid options to one of "singleColumn", "multipleColumns" or "groupRows" as demonstrated in the following configuration:
<ag-grid-angular
[groupDisplayType]="groupDisplayType"
/* other grid options ... */ />
this.groupDisplayType = 'multipleColumns';While not advised, it is also possible to configure these columns using Custom Group Columns.