Your search did not match any results.
DataGrid

Remote Virtual Scrolling

Documentation

With remote virtual scrolling, pages are loaded from the server when they enter the viewport. To enable this feature, set the scrolling.mode option to "virtual" and the remoteOperations option to true. The latter informs the widget that the server handles paging. In this demo, the server contains 1 000 000 records and returns 100 records per page. The page size is set using the paging.pageSize option. The larger it is, the fewer requests are sent to the server. To reduce the time required for rendering the loaded rows, set the scrolling.rowRenderingMode to "virtual"  — the DataGrid renders only rows that are in the viewport.

Copy to CodeSandBox
Apply
Reset
<dx-data-grid id="gridContainer" [dataSource]="dataSource" [remoteOperations]="true" [wordWrapEnabled]="true" [showBorders]="true"> <dxo-scrolling mode="virtual" rowRenderingMode="virtual" ></dxo-scrolling> <dxo-paging [pageSize]="100"></dxo-paging> <dxo-header-filter [visible]="true" [allowSearch]="true"></dxo-header-filter> <dxi-column dataField="Id" width="75"></dxi-column> <dxi-column dataField="StoreName" caption="Store" width="150"></dxi-column> <dxi-column dataField="ProductCategoryName" caption="Category" width="120"></dxi-column> <dxi-column dataField="ProductName" caption="Product"></dxi-column> <dxi-column dataField="DateKey" caption="Date" dataType="date" format="yyyy-MM-dd" width="100"></dxi-column> <dxi-column dataField="SalesAmount" caption="Amount" format="currency" width="100"> <dxo-header-filter [groupInterval]="1000"></dxo-header-filter> </dxi-column> </dx-data-grid>
import { NgModule, Component, enableProdMode, ChangeDetectionStrategy } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxDataGridModule } from 'devextreme-angular'; import * as AspNetData from "devextreme-aspnet-data-nojquery"; if(!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], changeDetection: ChangeDetectionStrategy.OnPush }) export class AppComponent { dataSource: any; constructor() { this.dataSource = AspNetData.createStore({ key: "Id", loadUrl: "https://js.devexpress.com/Demos/WidgetsGalleryDataService/api/Sales" }); } } @NgModule({ imports: [ BrowserModule, DxDataGridModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #gridContainer { height: 440px; }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular 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" }, 'devextreme-aspnet-data-nojquery': { "esModule": true } }, 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@5.1.2/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@5.1.2/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@5.1.2/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@5.1.2/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@5.1.2/bundles/platform-browser-dynamic.umd.js', '@angular/router': 'npm:@angular/router@5.1.2/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@5.1.2/bundles/forms.umd.js', '@angular/common/http': 'npm:@angular/common@5.1.2/bundles/common-http.umd.js', 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs@5.3.1', 'devextreme': 'npm:devextreme@18.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'quill-delta-to-html': 'npm:quill-delta-to-html@0.10.4/dist/browser/QuillDeltaToHtmlConverter.bundle.js', 'devextreme-angular': 'npm:devextreme-angular@18.2', 'devextreme-aspnet-data-nojquery': 'npm:devextreme-aspnet-data-nojquery@2.0.0' }, 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/18.2.3/css/dx.common.css" /> <link rel="dx-theme" data-theme="generic.light" href="https://cdn3.devexpress.com/jslib/18.2.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.21.3/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>