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 {
createApp,
defineComponent,
onBeforeMount,
ref,
shallowRef,
} from "vue";
import { AgGridVue } from "ag-grid-vue3";
import "./styles.css";
import {
AutoGroupColumnDef,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
RowGroupingDisplayType,
enableDevValidations,
} from "ag-grid-community";
import { RowGroupingModule } from "ag-grid-enterprise";
import { IOlympicData } from "./interfaces";
if (process.env.NODE_ENV !== "production") {
enableDevValidations();
}
ModuleRegistry.registerModules([ClientSideRowModelModule, RowGroupingModule]);
const VueExample = defineComponent({
template: `
<div style="height: 100%">
<div class="example-wrapper">
<div class="example-header">
<label>
<span>groupDisplayType:</span>
<select id="input-display-type" v-on:change="onDisplayTypeChange()">
<option value="singleColumn">"singleColumn"</option>
<option value="multipleColumns">"multipleColumns"</option>
<option value="groupRows">"groupRows"</option>
</select>
</label>
</div>
<ag-grid-vue
style="width: 100%; height: 100%;"
@grid-ready="onGridReady"
:columnDefs="columnDefs"
:defaultColDef="defaultColDef"
:autoGroupColumnDef="autoGroupColumnDef"
:groupDefaultExpanded="groupDefaultExpanded"
:rowData="rowData"></ag-grid-vue>
</div>
</div>
`,
components: {
"ag-grid-vue": AgGridVue,
},
setup(props) {
const gridApi = shallowRef<GridApi<IOlympicData> | null>(null);
const columnDefs = ref<ColDef[]>([
{ field: "country", rowGroup: true, hide: true },
{ field: "year", rowGroup: true, hide: true },
{ field: "athlete" },
{ field: "sport" },
{ field: "gold" },
{ field: "silver" },
{ field: "bronze" },
]);
const defaultColDef = ref<ColDef>({
flex: 1,
minWidth: 100,
});
const autoGroupColumnDef = ref<AutoGroupColumnDef>({
minWidth: 200,
});
const groupDefaultExpanded = ref(1);
const rowData = ref<IOlympicData[]>(null);
function onDisplayTypeChange() {
const displayType = (
document.querySelector("#input-display-type") as HTMLSelectElement
).value as RowGroupingDisplayType;
gridApi.value!.setGridOption("groupDisplayType", displayType);
}
const onGridReady = (params: GridReadyEvent) => {
gridApi.value = params.api;
const updateData = (data) => (rowData.value = data);
fetch("https://www.ag-grid.com/example-assets/olympic-winners.json")
.then((resp) => resp.json())
.then((data) => updateData(data));
};
return {
gridApi,
columnDefs,
defaultColDef,
autoGroupColumnDef,
groupDefaultExpanded,
rowData,
onGridReady,
onDisplayTypeChange,
};
},
});
const app = createApp(VueExample);
app.mount("#app");
.example-wrapper {
display: flex;
flex-direction: column;
height: 100%;
}
#myGrid {
flex: 1 1 0px;
width: 100%;
}
.example-header {
margin-bottom: 5px;
}
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-vue
:groupDisplayType="groupDisplayType"
/* other grid options ... */>
</ag-grid-vue>
this.groupDisplayType = 'multipleColumns';While not advised, it is also possible to configure these columns using Custom Group Columns.