Results:
Loading...

Angular Data GridGet Started with AG Grid

Quick Look Code Example

import { Component } from '@angular/core';
import { ColDef } from 'ag-grid-community';

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: [ './app.component.scss' ]
})
export class AppComponent  {

    columnDefs: ColDef[] = [
        { field: 'make' },
        { field: 'model' },
        { field: 'price' }
    ];

    rowData = [
        { make: 'Toyota', model: 'Celica', price: 35000 },
        { make: 'Ford', model: 'Mondeo', price: 32000 },
        { make: 'Porsche', model: 'Boxster', price: 72000 }
    ];

}

Please refer to our Compatibility Guide for Supported Versions of Angular & AG Grid.

Getting Started with Community Video

Getting Started with Enterprise Video

Getting Started with AG Grid Community

Below we provide code for a simple AG Grid Angular application. To get this working locally, create a new Angular application as follows:

ng new my-app --style scss --routing false
cd my-app
npm install --save ag-grid-community
npm install --save ag-grid-angular
npm run start

If everything goes well, npm run start has started the web server and conveniently opened a browser pointing to localhost:4200.

Grid Dependencies

Note the package.json has the following dependencies:

"dependencies": {
    "ag-grid-community": "30.2.0",
    "ag-grid-angular": "30.2.0",
    ...

ag-grid-community is the core logic of the Grid, and ag-grid-angular is the Angular Rendering Engine. Both are needed for the grid to work with Angular and their versions must match.

Copy in Application Code

Copy the content below into the file app.modules.ts:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from '@angular/common/http'
import { AgGridModule } from 'ag-grid-angular';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    AgGridModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Copy the content below into the file app.component.ts:

import { HttpClient } from '@angular/common/http';
import { Component, ViewChild } from '@angular/core';
import { AgGridAngular } from 'ag-grid-angular';
import { CellClickedEvent, ColDef, GridReadyEvent } from 'ag-grid-community';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {

  // Each Column Definition results in one Column.
  public columnDefs: ColDef[] = [
    { field: 'make'},
    { field: 'model'},
    { field: 'price' }
  ];

  // DefaultColDef sets props common to all Columns
  public defaultColDef: ColDef = {
    sortable: true,
    filter: true,
  };
  
  // Data that gets displayed in the grid
  public rowData$!: Observable<any[]>;

  // For accessing the Grid's API
  @ViewChild(AgGridAngular) agGrid!: AgGridAngular;

  constructor(private http: HttpClient) {}

  // Example load data from server
  onGridReady(params: GridReadyEvent) {
    this.rowData$ = this.http
      .get<any[]>('https://www.ag-grid.com/example-assets/row-data.json');
  }

  // Example of consuming Grid Event
  onCellClicked( e: CellClickedEvent): void {
    console.log('cellClicked', e);
  }

  // Example using Grid's API
  clearSelection(): void {
    this.agGrid.api.deselectAll();
  }
}

Copy the content below into the file app.component.html:

<!-- Button to clear selection -->
<button (click)="clearSelection()">Clear Selection</button>
<!-- AG Grid Angular Component -->
<ag-grid-angular
    style="width: 100%; height: 100%"
    class="ag-theme-alpine"
    [columnDefs]="columnDefs"
    [defaultColDef]="defaultColDef"
    [rowData]="rowData$ | async"
    [rowSelection]="'multiple'"
    [animateRows]="true"
    (gridReady)="onGridReady($event)"
    (cellClicked)="onCellClicked($event)"
  ></ag-grid-angular>

Copy the content below into the file styles.scss:

@import 'ag-grid-community/styles/ag-grid.css';
@import 'ag-grid-community/styles/ag-theme-alpine.css';

html, body {
    height: 100%;
    width: 100%;
    padding: 5px;
    box-sizing: border-box;
    -webkit-overflow-scrolling: touch;
}

If everything is correct, you should see a simple grid that looks like this:

AG Grid in its simplest form

We will now break this file down and explain the different parts...

Grid Module

The AG Grid Module was included inside the app.

import { AgGridModule } from 'ag-grid-angular';

 ...

  imports: [
    BrowserModule,
    HttpClientModule,
    AgGridModule
  ],

This allows access to the AG Grid component throughout the application.

Grid CSS and Themes

Two CSS files were loaded as follows:

@import 'ag-grid-community/styles/ag-grid.css'; // Core grid CSS, always needed
@import 'ag-grid-community/styles/ag-theme-alpine.css'; // Optional theme CSS

The first ag-grid.css is always needed. It's the core structural CSS needed by the grid. Without this, the Grid will not work.

The second ag-theme-alpine.css is the chosen Grid Theme. This is then subsequently applied to the grid by applying the Theme's CSS Class to the grid element class="ag-theme-alpine".

You can select from any of the Grid Provided Themes. If you don't like the provided themes you can Customise the Provided Theme or do not use a Theme and style the grid yourself from scratch.

The dimension of the Grid is also set on the parent DIV via style={{width: 500, height: 500}}. The grid will fill 100% in both directions, so size it's parent element to the required dimensions.

<ag-grid-angular
    style="width: 100%; height: 100%"
    class="ag-theme-alpine"/>

Setting Row Data

The Grid is provided Row Data via the rowData Grid Property. This is wired up using an Observable.

// Data that gets displayed in the grid
 public rowData$!: Observable<any[]>;
 ...

 // Example load data from server
 onGridReady(params: GridReadyEvent) {
   this.rowData$ = this.http
     .get<any[]>('https://www.ag-grid.com/example-assets/row-data.json');
 }

 ...

<ag-grid-angular
    [rowData]="rowData$ | async"
    ...

Setting Column Definitions

Columns are defined by setting Column Definitions. Each Column Definition defines one Column. Properties can be set for all Columns using the Default Column Definition.

// Each Column Definition results in one Column.
 public columnDefs: ColDef[] = [
   { field: 'make'},
   { field: 'model'},
   { field: 'price' }
 ];

 // DefaultColDef sets props common to all Columns
 public defaultColDef: ColDef = {
   sortable: true,
   filter: true,
 };

...

<ag-grid-angular
    [columnDefs]="columnDefs"
    [defaultColDef]="defaultColDef"
    ...
/>

Accessing the Grid's API

// For accessing the Grid's API
 @ViewChild(AgGridAngular) agGrid!: AgGridAngular;
 ...
 // Example using Grid's API
 clearSelection(): void {
   this.agGrid.api.deselectAll();
 }

Consuming Grid Events

Listen to Grid Events by adding a callback to the appropriate (eventName) output property. This example demonstrates consuming the cellClicked event.

<ag-grid-angular
    (cellClicked)="onCellClicked($event)"
    ...
/>

Grid Properties

Set other Grid Options by adding parameters to <ag-grid-angular/> component. This example demonstrates setting animateRows and rowSelection.

<ag-grid-angular
    [rowSelection]="'multiple'"
    [animateRows]="true"
    ...
/>

Getting Started with AG Grid Enterprise

We would love for you to try out AG Grid Enterprise. There is no cost to trial. You only need to get in touch if you want to start using AG Grid Enterprise in a project intended for production.

The following steps continues from above and installs AG Grid Enterprise.

Install Dependency

In addition to ag-grid-community and ag-grid-angular, AG Grid Enterprise also needs ag-grid-enterprise.

npm install --save ag-grid-enterprise

The package.json should now contain the following dependencies:

"dependencies": {
    "ag-grid-community": "30.2.0",
    "ag-grid-enterprise": "30.2.0",
    "ag-grid-angular": "30.2.0",
    ...

ag-grid-enterprise contains the Enterprise features only, it does not contain the core grid, hence you still need ag-grid-community and ag-grid-angular. Versions of all three must match.

Import Enterprise

Import AG Grid Enterprise intro your application as follows:

import 'ag-grid-enterprise';

And that is all, you use the same <ag-grid-angular/> component, except this time it comes installed with all the Enterprise features.

For example, you can now Row Group (an Enterprise Feature) by a particular Column by setting rowGroup=true on the Column Definition.

// Each Column Definition results in one Column.
 public columnDefs: ColDef[] = [
   { field: 'make', rowGroup: true},
   { field: 'model'},
   { field: 'price' }
 ];