Your search did not match any results.
Data Grid

Custom Summaries

Documentation
The DataGrid support custom summary calculation. In this example, summaries are only calculated against selected grid rows. This behavior is implemented using the calculateCustomSummary option.
Apply
Reset
<dx-data-grid id="gridContainer" [dataSource]="dataSource" [selectedRowKeys]="[1, 4, 7]"> <dxo-paging [enabled]="false"></dxo-paging> <dxo-selection mode="multiple"></dxo-selection> <dxi-column dataField="OrderNumber" [width]="130" caption="Invoice Number"></dxi-column> <dxi-column dataField="OrderDate" [width]="160" dataType="date"></dxi-column> <dxi-column dataField="Employee"></dxi-column> <dxi-column dataField="CustomerStoreCity" caption="City"></dxi-column> <dxi-column dataField="CustomerStoreState" caption="State"></dxi-column> <dxi-column dataField="SaleAmount" alignment="right" format="currency"></dxi-column> <dxo-summary [calculateCustomSummary]="calculateSelectedRow"> <dxi-total-item name="SelectedRowsSummary" summaryType="custom" valueFormat="currency" displayFormat="Sum: {0}" showInColumn="SaleAmount"> </dxi-total-item> </dxo-summary> </dx-data-grid> <dx-button text="Calculate summary for selected rows" (onClick)="calculateSummary()"> </dx-button>
import { NgModule, Component, ViewChild } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxDataGridModule, DxDataGridComponent, DxButtonModule } from 'devextreme-angular'; import { Service } from './app.service'; @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], providers: [Service] }) export class AppComponent { @ViewChild(DxDataGridComponent) dataGrid: DxDataGridComponent; dataSource: any; constructor(private service: Service) { this.dataSource = { store: { type: 'array', key: 'ID', data: this.service.getOrders() } } } calculateSelectedRow(options) { if (options.name === "SelectedRowsSummary") { if (options.summaryProcess === "start") { options.totalValue = 0; } else if (options.summaryProcess === "calculate") { if (options.component.isRowSelected(options.value.ID)) { options.totalValue = options.totalValue + options.value.SaleAmount; } } } } calculateSummary() { this.dataGrid.instance.refresh(); } } @NgModule({ imports: [ BrowserModule, DxDataGridModule, DxButtonModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
/deep/ #gridContainer { height: 440px; }
import { Injectable } from '@angular/core'; export class Order { ID: number; OrderNumber: number; OrderDate: string; SaleAmount: number; Terms: string; CustomerStoreState: string; CustomerStoreCity: string; Employee: string; } let orders: Order[] = [{ "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" }]; @Injectable() export class Service { getOrders() { return orders; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular 2 and DevExtreme here: // https://github.com/DevExpress/devextreme-angular/blob/master/README.md System.config({ transpiler: 'ts', typescriptOptions: { module: "commonjs", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@7.0.6/lib/plugin.js', 'typescript': 'npm:typescript@2.2.2/lib/typescript.js', '@angular/core': 'npm:@angular/core@4.1.0/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@4.1.0/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@4.1.0/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@4.1.0/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@4.1.0/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http@4.1.0/bundles/http.umd.js', '@angular/router': 'npm:@angular/router@4.1.0/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@4.1.0/bundles/forms.umd.js', 'rxjs': 'npm:rxjs@5.3.1', 'devextreme': 'npm:devextreme@17.1', 'jquery': 'npm:jquery@3.1.1/dist/jquery.min.js', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'devextreme-angular': 'npm:devextreme-angular@17.1' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme-angular': { main: 'index.js', defaultExtension: 'js' } } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <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/17.1.3/css/dx.spa.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/17.1.3/css/dx.common.css" /> <link rel="dx-theme" data-theme="generic.light" href="https://cdn3.devexpress.com/jslib/17.1.3/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.6.25/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>