Search results

Pivot Field List

The Pivot Grid provides a built-in Field List similar to Microsoft Excel. It allows you to add or remove fields and also rearrange them between different axes, including column, row, value, and filter along with filter and sort options dynamically at runtime.

The field list can be displayed in three different formats to interact with pivot grid. They are:

  • In-built Field List (Popup): To display the field list icon in Pivot Grid UI to invoke the built-in dialog.
  • Stand-alone Field List (Fixed): To display the field list in a static position within a web page.
  • Invoking dynamic Field List (Customized): To display the field list by invoking the built-in dialog independently through other means, for example, on a button click.

In-built Field List (Popup)

To display the field list icon in Pivot Grid UI, you need to set the showFieldList property to true. In order to display the field list dialog, click the field list icon at the top left corner of the Pivot Grid.

The field list icon will be displayed at the top right corner of the Pivot Grid, when grouping bar is enabled.

To use field list, you need to inject the FieldList module in pivot grid.

Source
Preview
index.tsx
import { FieldList, IDataOptions, IDataSet, Inject, PivotViewComponent } from '@syncfusion/ej2-react-pivotview';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { pivotData } from './datasource';

class App extends React.Component<{}, {}>{

  public dataSource: IDataOptions = {
    columns: [{ name: 'Year', caption: 'Production Year' }, { name: 'Quarter' }],
    data: pivotData as IDataSet[],
    expandAll: false,
    allowLabelFilter: true,
    allowValueFilter: true,
    filters: [],
    formatSettings: [{ name: 'Amount', format: 'C0' }],
    rows: [{ name: 'Country' }, { name: 'Products' }],
    values: [{ name: 'Sold', caption: 'Units Sold' }, { name: 'Amount', caption: 'Sold Amount' }]
  }
  public pivotGridObj: PivotViewComponent;
  render() {
    return <PivotViewComponent  ref={d => this.pivotGridObj = d!} id='PivotView' height={280} dataSource={this.dataSource} showFieldList={true}><Inject services={[FieldList]} /></PivotViewComponent>
  }
};

ReactDOM.render(<App />, document.getElementById('pivotview'));

Stand-alone Field List (Fixed)

The field list can be rendered in a static position, anywhere in web page layout, like a separate component. To do so, you need to set renderMode property to Fixed.

To make field list interact with pivot grid, you need to use the updateView and update methods for data source update in both field list and pivot grid simultaneously.

{% raw %}

import { CalculatedField, PivotFieldListComponent, IDataOptions, IDataSet, Inject, PivotViewComponent } from '@syncfusion/ej2-react-pivotview';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { pivotData } from './datasource';

class App extends React.Component<{}, {}>{

  public dataSource: IDataOptions = {
    columns: [{ name: 'Year', caption: 'Production Year' }, { name: 'Quarter' }],
    data: pivotData as IDataSet[],
    expandAll: false,
    filters: [],
    formatSettings: [{ name: 'Amount', format: 'C0' }],
    rows: [{ name: 'Country' }, { name: 'Products' }],
    values: [{ name: 'Sold', caption: 'Units Sold' }, { name: 'Amount', caption: 'Sold Amount' }]
  }
  public pivotGridObj: PivotViewComponent;
  public fieldlistObj: PivotFieldListComponent;
  render() {
    return <div className="control-section">
    <PivotViewComponent id='PivotViewFieldList' ref={d => this.pivotGridObj = d!} enginePopulated={this.afterPivotPopulate.bind(this)} width={'99%'} height={'530'} gridSettings={{columnWidth: 140}}>
    </PivotViewComponent>
    <PivotFieldListComponent id='PivotFieldList' ref={d => this.fieldlistObj = d!} enginePopulated={this.afterPopulate.bind(this)} dataSource={this.dataSource} renderMode={"Fixed"} allowCalculatedField={true}>
        <Inject services={[CalculatedField]} />
    </PivotFieldListComponent></div>
  }

  componentDidMount(): void {
    this.fieldlistObj.updateView(this.pivotGridObj);
  }

  afterPopulate(): void {
    if (this.fieldlistObj && this.pivotGridObj) {
        this.fieldlistObj.updateView(this.pivotGridObj);
    }
  }
  afterPivotPopulate(): void {
      if (this.fieldlistObj && this.pivotGridObj) {
          this.fieldlistObj.update(this.pivotGridObj);
      }
  }
  rendereComplete(): void {
      this.fieldlistObj.updateView(this.pivotGridObj);
  }
};

ReactDOM.render(<App />, document.getElementById('pivotview'));

{% endraw %}

Invoking dynamic Field List (Customized)

Also, you can display the field list dialog independently through other means. For example, you can invoke the field list dialog on an external button click. To do so, set renderMode property to Popup and since on button click, field list dialog will be invoked.

  • Meanwhile, you can display the field list dialog over specific target element within a web page using target property. By default, the target value is “null”, which by default refers the document.body element.
  • To make field list interact with pivot grid, you need to use the updateView and update methods for data source update in both field list and pivot grid simultaneously.

The below sample code illustrates the field list dialog invoked on an external button click.

{% raw %}

import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { CalculatedField, PivotFieldListComponent, IDataOptions, IDataSet, Inject, PivotViewComponent } from '@syncfusion/ej2-react-pivotview';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { pivotData } from './datasource';

class App extends React.Component<{}, {}>{

  public dataSource: IDataOptions = {
    columns: [{ name: 'Year', caption: 'Production Year' }, { name: 'Quarter' }],
    data: pivotData as IDataSet[],
    expandAll: false,
    filters: [],
    formatSettings: [{ name: 'Amount', format: 'C0' }],
    rows: [{ name: 'Country' }, { name: 'Products' }],
    values: [{ name: 'Sold', caption: 'Units Sold' }, { name: 'Amount', caption: 'Sold Amount' }]
  }
  public pivotGridObj: PivotViewComponent;
  public fieldlistObj: PivotFieldListComponent;
  render() {
    return <div><div className="control-section">
    <PivotViewComponent id='PivotViewFieldList' ref={d => this.pivotGridObj = d!} enginePopulated={this.afterPivotPopulate.bind(this)} width={'99%'} height={'530'} gridSettings={{columnWidth: 140}}>
    </PivotViewComponent>
    <PivotFieldListComponent id='PivotFieldList' ref={d => this.fieldlistObj = d!} enginePopulated={this.afterPopulate.bind(this)} dataSource={this.dataSource} target='#PivotFieldList' renderMode={"Popup"} allowCalculatedField={true}>
        <Inject services={[CalculatedField]} />
    </PivotFieldListComponent></div>
    <div className='col-lg-3 property-section'><ButtonComponent cssClass='e-primary' onClick={this.btnClick.bind(this)}>Field List</ButtonComponent></div></div>
  }

  btnClick(): void {
    this.fieldlistObj.dialogRenderer.fieldListDialog.show();
  }

  componentDidMount(): void {
    this.fieldlistObj.updateView(this.pivotGridObj);
  }

  afterPopulate(): void {
    if (this.fieldlistObj && this.pivotGridObj) {
        this.fieldlistObj.updateView(this.pivotGridObj);
    }
  }
  afterPivotPopulate(): void {
      if (this.fieldlistObj && this.pivotGridObj) {
          this.fieldlistObj.update(this.pivotGridObj);
      }
  }
  rendereComplete(): void {
      this.fieldlistObj.updateView(this.pivotGridObj);
  }
};

ReactDOM.render(<App />, document.getElementById('pivotview'));

{% endraw %}

See Also