Footer aggregate in Vue Treegrid component
7 Jun 202414 minutes to read
Footer aggregate value is calculated for all the rows, and it is displayed in the footer cells. Use the footerTemplate property to render the aggregate value in footer cells.
<template>
<div id="app">
<ejs-treegrid :dataSource="data" childMapping='children' :treeColumnIndex='1' height='260px'>
<e-columns>
<e-column field='FreightID' headerText='Freight ID' width=90 textAlign='Right'></e-column>
<e-column field='FreightName' headerText='Freight Name' width=180></e-column>
<e-column field='UnitWeight' headerText='Unit Per Weight' width=90 type='number' textAlign='Right'></e-column>
<e-column field='TotalUnits' headerText='Total Units' type='number' width=80 textAlign='Right'></e-column>
</e-columns>
<e-aggregates>
<e-aggregate :showChildSummary='false'>
<e-columns>
<e-column type="Max" field="UnitWeight" :footerTemplate='footerMax'></e-column>
<e-column type="Min" field="TotalUnits" :footerTemplate='footerMin'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-treegrid>
</div>
</template>
<script setup>
import { provide } from "vue";
import { TreeGridComponent as EjsTreegrid, Aggregate, ColumnDirective as EColumn, ColumnsDirective as EColumns,
AggregatesDirective as EAggregates, AggregateDirective as EAggregate
} from "@syncfusion/ej2-vue-treegrid";
import { summaryRowData } from "./datasource.js";
import { createApp } from 'vue';
const app = createApp({});
const minTemplate = app.component('minTemplate', {
template: `<span>Min: </span>`,
data () {return { data: {}};}
});
const maxTemplate = app.component('maxTemplate', {
template: `<span>Max: </span>`,
data () {return { data: {}};}
});
const data = summaryRowData;
const footerMin = function () {
return { template : minTemplate
}
};
const footerMax = function () {
return { template : maxTemplate
}
};
provide('treegrid', [Aggregate]);
</script><template>
<div id="app">
<ejs-treegrid :dataSource="data" childMapping='children' :treeColumnIndex='1' height='260px'>
<e-columns>
<e-column field='FreightID' headerText='Freight ID' width=90 textAlign='Right'></e-column>
<e-column field='FreightName' headerText='Freight Name' width=180></e-column>
<e-column field='UnitWeight' headerText='Unit Per Weight' width=90 type='number' textAlign='Right'></e-column>
<e-column field='TotalUnits' headerText='Total Units' type='number' width=80 textAlign='Right'></e-column>
</e-columns>
<e-aggregates>
<e-aggregate :showChildSummary='false'>
<e-columns>
<e-column type="Max" field="UnitWeight" :footerTemplate='footerMax'></e-column>
<e-column type="Min" field="TotalUnits" :footerTemplate='footerMin'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-treegrid>
</div>
</template>
<script>
import { TreeGridComponent, Aggregate, AggregateDirective, AggregatesDirective, ColumnDirective, ColumnsDirective } from "@syncfusion/ej2-vue-treegrid";
import { summaryRowData } from "./datasource.js";
import { createApp } from 'vue';
const app = createApp({});
const minTemplate = app.component('minTemplate', {
template: `<span>Min: </span>`,
data () {return { data: {}};}
});
const maxTemplate = app.component('maxTemplate', {
template: `<span>Max: </span>`,
data () {return { data: {}};}
});
export default {
name: "App",
components: {
"ejs-treegrid":TreeGridComponent,
"e-columns":ColumnsDirective,
"e-column":ColumnDirective,
"e-aggregates":AggregatesDirective,
"e-aggregate":AggregateDirective,
},
data() {
return {
data: summaryRowData,
footerMin: function () {
return { template : minTemplate
}
},
footerMax: function () {
return { template : maxTemplate
}
}
};
},
provide: {
treegrid: [Aggregate]
}
}
</script>The aggregate values must be accessed inside the template using their corresponding
typename.
How to format aggregate value
You can format the aggregate value result by using the format property.
<template>
<div id="app">
<ejs-treegrid :dataSource="data" childMapping='subtasks' :treeColumnIndex='1' height='260px'>
<e-columns>
<e-column field='category' headerText='Category' width=160 textAlign='Right'></e-column>
<e-column field='units' headerText='Total Units' width=130 type='number'></e-column>
<e-column field='unitPrice' headerText='Unit Price($)' width=110 type='number' format= 'C2' textAlign='Right'></e-column>
<e-column field='price' headerText='Price($)' type='number' width=160 format= 'C2' textAlign='Right'></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column type="Sum" field="price" format="C2" :footerTemplate='footerSum'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-treegrid>
</div>
</template>
<script setup>
import { provide } from "vue";
import { TreeGridComponent as EjsTreegrid, Aggregate, AggregateDirective as EAggregate, AggregatesDirective as EAggregates,
ColumnDirective as EColumn, ColumnsDirective as EColumns
} from "@syncfusion/ej2-vue-treegrid";
import { summaryData } from "./datasource.js";
import { createApp } from 'vue';
const app = createApp({});
const minTemplate = app.component('minTemplate', {
template: `<span>Min: </span>`,
data () {return { data: {}};}
});
const data = summaryData;
const footerSum = function () {
return { template : minTemplate}
};
provide('treegrid', [Aggregate]);
</script><template>
<div id="app">
<ejs-treegrid :dataSource="data" childMapping='subtasks' :treeColumnIndex='1' height='260px'>
<e-columns>
<e-column field='category' headerText='Category' width=160 textAlign='Right'></e-column>
<e-column field='units' headerText='Total Units' width=130 type='number'></e-column>
<e-column field='unitPrice' headerText='Unit Price($)' width=110 type='number' format= 'C2' textAlign='Right'></e-column>
<e-column field='price' headerText='Price($)' type='number' width=160 format= 'C2' textAlign='Right'></e-column>
</e-columns>
<e-aggregates>
<e-aggregate>
<e-columns>
<e-column type="Sum" field="price" format="C2" :footerTemplate='footerSum'></e-column>
</e-columns>
</e-aggregate>
</e-aggregates>
</ejs-treegrid>
</div>
</template>
<script>
import { TreeGridComponent, Aggregate, ColumnDirective, ColumnsDirective, AggregateDirective, AggregatesDirective } from "@syncfusion/ej2-vue-treegrid";
import { summaryData } from "./datasource.js";
import { createApp } from 'vue';
const app = createApp({});
const minTemplate = app.component('minTemplate', {
template: `<span>Min: </span>`,
data () {return { data: {}};}
});
export default {
name: "App",
components: {
"ejs-treegrid":TreeGridComponent,
"e-columns":ColumnsDirective,
"e-column":ColumnDirective,
"e-aggregates":AggregatesDirective,
"e-aggregate":AggregateDirective,
},
data() {
return {
data: summaryData,
footerSum: function () {
return { template : minTemplate
}
}
};
},
provide: {
treegrid: [Aggregate]
}
}
</script>