DevExtreme Angular - Local Array

To bind a UI component to a local array, pass this array to the UI component's dataSource property. We recommend that you also set the keyExpr property OR the valueExpr and displayExpr properties, depending on your UI component:

app.component.html
app.component.ts
app.service.ts
app.module.ts
  • <dx-data-grid
  • [dataSource]="employees"
  • keyExpr="ID">
  • </dx-data-grid>
  • <dx-select-box
  • [dataSource]="employees"
  • valueExpr="ID"
  • [displayExpr]="getDisplayExpr">
  • </dx-select-box>
  • import { Component } from '@angular/core';
  • import { Employee, Service } from './app.service';
  •  
  • @Component({
  • selector: 'app-root',
  • templateUrl: './app.component.html',
  • styleUrls: ['./app.component.css']
  • })
  • export class AppComponent {
  • employees: Employee[];
  • constructor(service: Service) {
  • this.employees = service.getEmployees();
  • }
  • getDisplayExpr(item) {
  • return item && item.FirstName + ' ' + item.LastName;
  • }
  • }
  • import { Injectable } from '@angular/core';
  •  
  • export class Employee {
  • ID: Number,
  • FirstName: String,
  • LastName: String
  • }
  •  
  • const employees: Employee[] = [
  • { ID: 1, FirstName: 'Sandra', LastName: 'Johnson' },
  • { ID: 2, FirstName: 'James', LastName: 'Scott' },
  • { ID: 3, FirstName: 'Nancy', LastName: 'Smith' }
  • ];
  •  
  • @Injectable()
  • export class Service {
  • getEmployees(): Employee[] {
  • return employees;
  • }
  • }
  • import { BrowserModule } from '@angular/platform-browser';
  • import { NgModule } from '@angular/core';
  • import { AppComponent } from './app.component';
  •  
  • import { DxDataGridModule, DxSelectBoxModule } from 'devextreme-angular';
  • import { Service } from './app.service';
  •  
  • @NgModule({
  • declarations: [
  • AppComponent
  • ],
  • imports: [
  • BrowserModule,
  • DxDataGridModule,
  • DxSelectBoxModule
  • ],
  • providers: [
  • Service
  • ],
  • bootstrap: [AppComponent]
  • })
  • export class AppModule { }

If you plan to update the data or need to handle data-related events, wrap the array in an ArrayStore. You can use the store's key property instead of the UI component's keyExpr or valueExpr. You can further wrap the ArrayStore in a DataSource if you need to filter, sort, group, and otherwise shape the data.

The following example declares an ArrayStore, wraps it in a DataSource, and binds the DataGrid and SelectBox UI components to this DataSource:

app.component.html
app.component.ts
  • <dx-data-grid
  • [dataSource]="employeesDataSource">
  • </dx-data-grid>
  • <dx-select-box
  • [dataSource]="employeesDataSource"
  • [displayExpr]="getDisplayExpr">
  • </dx-select-box>
  • import { Component } from '@angular/core';
  • import { Service } from './app.service';
  •  
  • import ArrayStore from 'devextreme/data/array_store';
  • import DataSource from 'devextreme/data/data_source';
  •  
  • @Component({
  • selector: 'app-root',
  • templateUrl: './app.component.html',
  • styleUrls: ['./app.component.css']
  • })
  • export class AppComponent {
  • employeesDataSource: DataSource;
  • constructor(service: Service) {
  • const employeesStore = new ArrayStore({
  • data: service.getEmployees(),
  • key: 'ID',
  • onLoaded: function() {
  • // ...
  • }
  • });
  •  
  • this.employeesDataSource = new DataSource({
  • store: employeesStore,
  • sort: 'LastName'
  • });
  • }
  • getDisplayExpr(item) {
  • return item && item.FirstName + ' ' + item.LastName;
  • }
  • }
NOTE
If you pass a JavaScript array to a UI component's dataSource property, the UI component automatically places it in an ArrayStore that is wrapped in a DataSource. You can then call the getDataSource() method to get this DataSource.