Footer aggregate in Vue Grid component
16 Mar 202314 minutes to read
Footer aggregate value is calculated from all the rows and it can be displayed in footer cells. Use footerTemplate
to render the aggregate value in footer cells.
<template>
<div id="app">
<ejs-grid :dataSource='data' height='210px'>
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='right' width=120></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=150></e-column>
<e-column field='Freight' width=150></e-column>
<e-column field='ShipName' headerText='Ship Name' width=150></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column type="Sum" field="Freight" :footerTemplate='footerSum'></e-column>
</e-columns>
</e-aggregate>
<e-aggregate>
<e-columns>
<e-column type="Max" field="Freight" :footerTemplate='footerMax'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Aggregate } from "@syncfusion/ej2-vue-grids";
import { data } from './datasource.js';
Vue.use(GridPlugin);
export default {
data() {
return {
data: data,
footerSum: function () {
return { template : Vue.component('sumTemplate', {
template: `<span>Sum: </span>`,
data () {return { data: {}};}
})
}
},
footerMax: function () {
return { template : Vue.component('maxTemplate', {
template: `<span>Max: </span>`,
data () {return { data: {}};}
})
}
}
};
},
provide: {
grid: [Aggregate]
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
</style>
The aggregate values must be accessed inside the template using their corresponding
type
name.
How to format aggregate value
You can format the aggregate value result by using the format
property.
<template>
<div id="app">
<ejs-grid :dataSource='data' height='210px'>
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='right' width=120></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=150></e-column>
<e-column field='Freight' width=150></e-column>
<e-column field='ShipName' headerText='Ship Name' width=150></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column type="Sum" field="Freight" format="C2" :footerTemplate='footerSum'></e-column>
</e-columns>
</e-aggregate>
<e-aggregate>
<e-columns>
<e-column type="Max" field="Freight" format="C2" :footerTemplate='footerMax'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Aggregate } from "@syncfusion/ej2-vue-grids";
import { data } from './datasource.js';
Vue.use(GridPlugin);
export default {
data() {
return {
data: data,
footerSum: function () {
return { template : Vue.component('sumTemplate', {
template: `<span>Sum: </span>`,
data () {return { data: {}};}
})
}
},
footerMax: function () {
return { template : Vue.component('maxTemplate', {
template: `<span>Max: </span>`,
data () {return { data: {}};}
})
}
}
};
},
provide: {
grid: [Aggregate]
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
</style>
How to place aggregates on top of the Grid
By default, the aggregated values are placed at the bottom of the footer section. It is possible to place the aggregated values at the top of the header. This is achieved by using the dataBound event, getHeaderContent, and getFooterContent methods of the Grid.
In the following sample, the footer element is appended to the header element using the getHeaderContent
and getFooterContent
methods in the dataBound
event.
<template>
<div id="app">
<ejs-grid ref='grid' :dataSource='data' height='210px' :dataBound="dataBound">
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='right' width=120></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=150></e-column>
<e-column field='Freight' width=150></e-column>
<e-column field='ShipName' headerText='Ship Name' width=150></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column type="Sum" field="Freight" :footerTemplate='footerSum'></e-column>
</e-columns>
</e-aggregate>
<e-aggregate>
<e-columns>
<e-column type="Max" field="Freight" :footerTemplate='footerMax'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Aggregate } from "@syncfusion/ej2-vue-grids";
import { data } from './datasource.js';
Vue.use(GridPlugin);
export default {
data() {
return {
data: data,
footerSum: function () {
return { template : Vue.component('sumTemplate', {
template: `<span>Sum: </span>`,
data () {return { data: {}};}
})
}
},
footerMax: function () {
return { template : Vue.component('maxTemplate', {
template: `<span>Max: </span>`,
data () {return { data: {}};}
})
}
}
};
},
methods: {
dataBound: function (args) {
this.$refs.grid.ej2Instances.getHeaderContent().append(this.$refs.grid.ej2Instances.getFooterContent());
}
},
provide: {
grid: [Aggregate]
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
</style>