Your search did not match any results.
Data Grid

Group Summaries

To configure group summaries, populate the summary.groupItems array with summary configuration objects. Each object should specify a column that supplies data for summary calculation and a summaryType—an aggregate function that should be applied to this data.

Position a Group Summary

Group summaries are displayed in parentheses after the group caption. You can reposition them as follows:

  • Display a summary in a column
    You can align a summary to its corresponding column (see the Sale Amount and Total Amount columns). To do this, enable the alignByColumn property. If you want to align a summary to a different column, specify the showInColumn property.

  • Display Summary Values within Group Footers
    You can make a summary item display its values within group footers. To do this, enable the showInGroupFooter property. Summary items will appear within their corresponding columns (see the Total Amount column). If you want to display summaries in another column, specify the showInColumn property.

Format Summary Values

To format summary values, use the valueFormat property. This demo applies the "currency" format to summary values calculated against the Total Amount and Sale Amount columns. If you also want to add custom text to summary values, use the displayFormat property. This demo sets this property for summaries of "sum" and "count" types.

Sort Groups by Summary Values

This demo sorts groups by summary values (the number of orders). To do this, the code adds an object to the sortByGroupSummaryInfo array. The object specifies the summaryItem whose values are used to sort the group rows.

Backend API
Copy to CodeSandBox
Apply
Reset
<template> <div> <DxDataGrid id="gridContainer" :data-source="orders" :show-borders="true" key-expr="ID" > <DxSelection mode="single"/> <DxColumn :width="130" data-field="OrderNumber" caption="Invoice Number" /> <DxColumn :width="160" data-field="OrderDate" data-type="date" /> <DxColumn :group-index="0" data-field="Employee" /> <DxColumn data-field="CustomerStoreCity" caption="City" /> <DxColumn data-field="CustomerStoreState" caption="State" /> <DxColumn data-field="SaleAmount" alignment="right" format="currency" /> <DxColumn data-field="TotalAmount" alignment="right" format="currency" /> <DxSummary> <DxGroupItem column="OrderNumber" summary-type="count" display-format="{0} orders" /> <DxGroupItem :show-in-group-footer="false" :align-by-column="true" column="SaleAmount" summary-type="max" value-format="currency" /> <DxGroupItem :show-in-group-footer="false" :align-by-column="true" column="TotalAmount" summary-type="max" value-format="currency" /> <DxGroupItem :show-in-group-footer="true" column="TotalAmount" summary-type="sum" value-format="currency" display-format="Total: {0}" /> </DxSummary> <DxSortByGroupSummaryInfo summary-item="count"/> </DxDataGrid> </div> </template> <script> import { DxDataGrid, DxColumn, DxSelection, DxSummary, DxGroupItem, DxSortByGroupSummaryInfo } from 'devextreme-vue/data-grid'; import service from './data.js'; export default { components: { DxDataGrid, DxColumn, DxSelection, DxSummary, DxGroupItem, DxSortByGroupSummaryInfo }, data() { return { orders: service.getOrders() }; } }; </script> <style scoped> #gridContainer { height: 440px; } </style>
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/21.1.5/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/21.1.5/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> </div> </div> </body> </html>
let orders = [{ 'ID' : 1, 'OrderNumber' : 35703, 'OrderDate' : '2014-04-10', 'SaleAmount' : 11800, 'Terms' : '15 Days', 'TotalAmount' : 12175, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Los Angeles', 'Employee' : 'Harv Mudd' }, { 'ID' : 4, 'OrderNumber' : 35711, 'OrderDate' : '2014-01-12', 'SaleAmount' : 16050, 'Terms' : '15 Days', 'TotalAmount' : 16550, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'San Jose', 'Employee' : 'Jim Packard' }, { 'ID' : 5, 'OrderNumber' : 35714, 'OrderDate' : '2014-01-22', 'SaleAmount' : 14750, 'Terms' : '15 Days', 'TotalAmount' : 15250, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 7, 'OrderNumber' : 35983, 'OrderDate' : '2014-02-07', 'SaleAmount' : 3725, 'Terms' : '15 Days', 'TotalAmount' : 3850, 'CustomerStoreState' : 'Colorado', 'CustomerStoreCity' : 'Denver', 'Employee' : 'Todd Hoffman' }, { 'ID' : 9, 'OrderNumber' : 36987, 'OrderDate' : '2014-03-11', 'SaleAmount' : 14200, 'Terms' : '15 Days', 'TotalAmount' : 14800, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 11, 'OrderNumber' : 38466, 'OrderDate' : '2014-03-01', 'SaleAmount' : 7800, 'Terms' : '15 Days', 'TotalAmount' : 8200, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Los Angeles', 'Employee' : 'Harv Mudd' }, { 'ID' : 15, 'OrderNumber' : 39874, 'OrderDate' : '2014-02-04', 'SaleAmount' : 9050, 'Terms' : '30 Days', 'TotalAmount' : 19100, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 18, 'OrderNumber' : 42847, 'OrderDate' : '2014-02-15', 'SaleAmount' : 20400, 'Terms' : '30 Days', 'TotalAmount' : 20800, 'CustomerStoreState' : 'Wyoming', 'CustomerStoreCity' : 'Casper', 'Employee' : 'Todd Hoffman' }, { 'ID' : 19, 'OrderNumber' : 43982, 'OrderDate' : '2014-05-29', 'SaleAmount' : 6050, 'Terms' : '30 Days', 'TotalAmount' : 6250, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 29, 'OrderNumber' : 56272, 'OrderDate' : '2014-02-06', 'SaleAmount' : 15850, 'Terms' : '30 Days', 'TotalAmount' : 16350, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 30, 'OrderNumber' : 57429, 'OrderDate' : '2013-12-31', 'SaleAmount' : 11050, 'Terms' : '30 Days', 'TotalAmount' : 11400, 'CustomerStoreState' : 'Arizona', 'CustomerStoreCity' : 'Phoenix', 'Employee' : 'Clark Morgan' }, { 'ID' : 32, 'OrderNumber' : 58292, 'OrderDate' : '2014-05-13', 'SaleAmount' : 13500, 'Terms' : '15 Days', 'TotalAmount' : 13800, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Los Angeles', 'Employee' : 'Harv Mudd' }, { 'ID' : 36, 'OrderNumber' : 62427, 'OrderDate' : '2014-01-27', 'SaleAmount' : 23500, 'Terms' : '15 Days', 'TotalAmount' : 24000, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 39, 'OrderNumber' : 65977, 'OrderDate' : '2014-02-05', 'SaleAmount' : 2550, 'Terms' : '15 Days', 'TotalAmount' : 2625, 'CustomerStoreState' : 'Wyoming', 'CustomerStoreCity' : 'Casper', 'Employee' : 'Todd Hoffman' }, { 'ID' : 40, 'OrderNumber' : 66947, 'OrderDate' : '2014-03-23', 'SaleAmount' : 3500, 'Terms' : '15 Days', 'TotalAmount' : 3600, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 42, 'OrderNumber' : 68428, 'OrderDate' : '2014-04-10', 'SaleAmount' : 10500, 'Terms' : '15 Days', 'TotalAmount' : 10900, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Los Angeles', 'Employee' : 'Harv Mudd' }, { 'ID' : 43, 'OrderNumber' : 69477, 'OrderDate' : '2014-03-09', 'SaleAmount' : 14200, 'Terms' : '15 Days', 'TotalAmount' : 14500, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Anaheim', 'Employee' : 'Harv Mudd' }, { 'ID' : 46, 'OrderNumber' : 72947, 'OrderDate' : '2014-01-14', 'SaleAmount' : 13350, 'Terms' : '30 Days', 'TotalAmount' : 13650, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 47, 'OrderNumber' : 73088, 'OrderDate' : '2014-03-25', 'SaleAmount' : 8600, 'Terms' : '30 Days', 'TotalAmount' : 8850, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Reno', 'Employee' : 'Clark Morgan' }, { 'ID' : 50, 'OrderNumber' : 76927, 'OrderDate' : '2014-04-27', 'SaleAmount' : 9800, 'Terms' : '30 Days', 'TotalAmount' : 10050, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 51, 'OrderNumber' : 77297, 'OrderDate' : '2014-04-30', 'SaleAmount' : 10850, 'Terms' : '30 Days', 'TotalAmount' : 11100, 'CustomerStoreState' : 'Arizona', 'CustomerStoreCity' : 'Phoenix', 'Employee' : 'Clark Morgan' }, { 'ID' : 56, 'OrderNumber' : 84744, 'OrderDate' : '2014-02-10', 'SaleAmount' : 4650, 'Terms' : '30 Days', 'TotalAmount' : 4750, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 57, 'OrderNumber' : 85028, 'OrderDate' : '2014-05-17', 'SaleAmount' : 2575, 'Terms' : '30 Days', 'TotalAmount' : 2625, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Reno', 'Employee' : 'Clark Morgan' }, { 'ID' : 59, 'OrderNumber' : 87297, 'OrderDate' : '2014-04-21', 'SaleAmount' : 14200, 'Terms' : '30 Days', 'TotalAmount' : 0, 'CustomerStoreState' : 'Wyoming', 'CustomerStoreCity' : 'Casper', 'Employee' : 'Todd Hoffman' }, { 'ID' : 60, 'OrderNumber' : 88027, 'OrderDate' : '2014-02-14', 'SaleAmount' : 13650, 'Terms' : '30 Days', 'TotalAmount' : 14050, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 65, 'OrderNumber' : 94726, 'OrderDate' : '2014-05-22', 'SaleAmount' : 20500, 'Terms' : '15 Days', 'TotalAmount' : 20800, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'San Jose', 'Employee' : 'Jim Packard' }, { 'ID' : 66, 'OrderNumber' : 95266, 'OrderDate' : '2014-03-10', 'SaleAmount' : 9050, 'Terms' : '15 Days', 'TotalAmount' : 9250, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 69, 'OrderNumber' : 98477, 'OrderDate' : '2014-01-01', 'SaleAmount' : 23500, 'Terms' : '15 Days', 'TotalAmount' : 23800, 'CustomerStoreState' : 'Wyoming', 'CustomerStoreCity' : 'Casper', 'Employee' : 'Todd Hoffman' }, { 'ID' : 70, 'OrderNumber' : 99247, 'OrderDate' : '2014-02-08', 'SaleAmount' : 2100, 'Terms' : '15 Days', 'TotalAmount' : 2150, 'CustomerStoreState' : 'Utah', 'CustomerStoreCity' : 'Salt Lake City', 'Employee' : 'Clark Morgan' }, { 'ID' : 78, 'OrderNumber' : 174884, 'OrderDate' : '2014-04-10', 'SaleAmount' : 7200, 'Terms' : '30 Days', 'TotalAmount' : 7350, 'CustomerStoreState' : 'Colorado', 'CustomerStoreCity' : 'Denver', 'Employee' : 'Todd Hoffman' }, { 'ID' : 81, 'OrderNumber' : 188877, 'OrderDate' : '2014-02-11', 'SaleAmount' : 8750, 'Terms' : '30 Days', 'TotalAmount' : 8900, 'CustomerStoreState' : 'Arizona', 'CustomerStoreCity' : 'Phoenix', 'Employee' : 'Clark Morgan' }, { 'ID' : 82, 'OrderNumber' : 191883, 'OrderDate' : '2014-02-05', 'SaleAmount' : 9900, 'Terms' : '30 Days', 'TotalAmount' : 10150, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Los Angeles', 'Employee' : 'Harv Mudd' }, { 'ID' : 83, 'OrderNumber' : 192474, 'OrderDate' : '2014-01-21', 'SaleAmount' : 12800, 'Terms' : '30 Days', 'TotalAmount' : 13100, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'Anaheim', 'Employee' : 'Harv Mudd' }, { 'ID' : 84, 'OrderNumber' : 193847, 'OrderDate' : '2014-03-21', 'SaleAmount' : 14100, 'Terms' : '30 Days', 'TotalAmount' : 14350, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'San Diego', 'Employee' : 'Harv Mudd' }, { 'ID' : 85, 'OrderNumber' : 194877, 'OrderDate' : '2014-03-06', 'SaleAmount' : 4750, 'Terms' : '30 Days', 'TotalAmount' : 4950, 'CustomerStoreState' : 'California', 'CustomerStoreCity' : 'San Jose', 'Employee' : 'Jim Packard' }, { 'ID' : 86, 'OrderNumber' : 195746, 'OrderDate' : '2014-05-26', 'SaleAmount' : 9050, 'Terms' : '30 Days', 'TotalAmount' : 9250, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Las Vegas', 'Employee' : 'Harv Mudd' }, { 'ID' : 87, 'OrderNumber' : 197474, 'OrderDate' : '2014-03-02', 'SaleAmount' : 6400, 'Terms' : '30 Days', 'TotalAmount' : 6600, 'CustomerStoreState' : 'Nevada', 'CustomerStoreCity' : 'Reno', 'Employee' : 'Clark Morgan' }, { 'ID' : 88, 'OrderNumber' : 198746, 'OrderDate' : '2014-05-09', 'SaleAmount' : 15700, 'Terms' : '30 Days', 'TotalAmount' : 16050, 'CustomerStoreState' : 'Colorado', 'CustomerStoreCity' : 'Denver', 'Employee' : 'Todd Hoffman' }, { 'ID' : 91, 'OrderNumber' : 214222, 'OrderDate' : '2014-02-08T00:00:00', 'SaleAmount' : 11050, 'Terms' : '30 Days', 'TotalAmount' : 11250, 'CustomerStoreState' : 'Arizona', 'CustomerStoreCity' : 'Phoenix', 'Employee' : 'Clark Morgan' }]; export default { getOrders() { return orders; } };
window.config = { transpiler: 'plugin-babel', meta: { '*.vue': { loader: 'vue-loader' }, 'devextreme/localization.js': { "esModule": true }, }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'vue': 'npm:vue@3.0.0/dist/vue.esm-browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@1.0.15/index.js', 'mitt': 'npm:mitt/dist/mitt.umd.js', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.28.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@21.1.5/cjs', 'devextreme-vue': 'npm:devextreme-vue@21.1.5', 'jszip': 'npm:jszip@3.7.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@1.3.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.1.25/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@3.0.4/dist/dx-gantt.js', '@devextreme/vdom': 'npm:@devextreme/vdom@1.2.2', 'inferno': 'npm:inferno@7.4.8/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat@7.4.8/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.8/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom@1.0.7/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate@7.4.8/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode@7.4.8/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class@7.4.8/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras@7.4.8/dist/inferno-extras.min.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js' }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' }, '@devextreme/vdom': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, packageConfigPaths: [ "npm:@devextreme/*/package.json", ], babelOptions: { sourceMaps: false, stage0: true } }; System.config(window.config);