Implementing PivotView in React
The Syncfusion React PivotView component enables powerful data analysis and reporting capabilities. It allows users to organize, analyze, and summarize multidimensional data through interactive pivot tables with features like grouping, filtering, aggregation, drill-down analysis, and export functionality.
⚠️ Important: Always verify API class names, properties, and method signatures by consulting the reference files in this skill (references/*.md). These are maintained with verified, working examples. Do not assume API details from other sources.
⚠️ Security Warning: Data Source Validation
CRITICAL SECURITY NOTICE: When implementing pivot tables, always use trusted data sources. Never fetch or bind data from untrusted or user-provided URLs without proper validation and sanitization.
Security Best Practices:
- Use Local Data: Prefer local, in-memory data sources for maximum security
- Validate Remote Sources: Only connect to authenticated and authorized API endpoints under your control
- Sanitize User Input: Never allow users to specify arbitrary URLs or data sources
- Implement Authentication: Always use authentication headers and secure API endpoints
- Content Validation: Validate and sanitize all data received from external sources before binding
- Use HTTPS: Always use HTTPS for remote data connections
- Rate Limiting: Implement rate limiting on API endpoints to prevent abuse
Security Risks:
- Indirect Prompt Injection: Untrusted third-party data can contain malicious content that manipulates AI agent behavior
- Data Exfiltration: Malicious data sources could attempt to extract sensitive information
- Code Injection: Untrusted data may contain scripts or harmful content
Recommended Approach:
✅ DO: Use controlled, authenticated backend APIs
✅ DO: Implement server-side data validation
✅ DO: Use environment variables for API endpoints
✅ DO: Whitelist allowed data sources
❌ DON'T: Accept user-provided URLs
❌ DON'T: Bind to public, untrusted endpoints
❌ DON'T: Skip data validation and sanitization
❌ DON'T: Use HTTP for sensitive data
When to Use This Skill
Use this skill when you need to:
- Create interactive pivot tables for data analysis
- Set up data aggregation and summarization
- Build dynamic reporting dashboards
- Configure row/column grouping with hierarchies
- Implement data filtering and sorting
- Add drill-down/drill-through capabilities
- Export reports to Excel or PDF
- Optimize performance for large datasets
- Style and format pivot table display
- Persist pivot table state across sessions
Navigation Guide
Setup
📄 Read: references/getting-started.md
- Installation, package setup, basic component creation, CSS imports, NextJS integration
📄 Read (optional): references/nextjs-integration.md
- Next.js App Router and Pages Router setup, dynamic imports, SSR considerations, API routes, deployment
Data Management
📄 Read: references/data-binding.md
- JSON data binding, CSV data binding, remote data binding, field mapping, DataManager setup
📄 Read: references/connecting-to-databases.md
- Database connections, Web API setup, SQL Server, MySQL, PostgreSQL, MongoDB, Oracle, Elasticsearch, Snowflake
📄 Read: references/connecting-to-data-source.md
- OLAP connections, server-side engine configuration, real-time data updates
Visualization & Interaction
📄 Read: references/pivot-chart.md
- Integrating pivot charts, chart types, visualization options, chart customization
📄 Read: references/classic-layout.md
- Classic layout configuration, layout switching, UI control options
📄 Read: references/drill.md
- Drill-down and drill-through functionality, editing, navigation controls, event handling
Data Organization & Display
📄 Read: references/field-list.md
- In-built field list (popup), stand-alone field list (fixed), field list modes, UI interactions, configuration options
📄 Read: references/grouping-bar.md
- Grouping bar configuration, drag-and-drop operations, filter/sort/remove icons, fields panel, value type icon, exclusion options
📄 Read: references/data-shaping.md
- Aggregation functions, calculated fields (defining and editing), summary customization options
📄 Read: references/aggregation.md
- 24+ aggregation types (Sum, Average, Count, etc.), advanced aggregations, base field configuration, runtime modification
📄 Read: references/calculated-field.md
- Interactive calculated field dialog, formula syntax and operators, code-based methods, format settings
📄 Read: references/grouping.md
- Data grouping feature, number grouping with ranges, date grouping with hierarchies, programmatic configuration, ungrouping
📄 Read: references/data-formatting.md
- Number formatting, conditional formatting, cell styling, tooltip customization
📄 Read: references/grid-customization.md
- Cell templates, row heights, column widths, text alignment, column resizing and reordering, dimension configuration
📄 Read: references/row-and-column.md
- Cell template customization, dimension configuration, row height, column width, resizing, reordering, text alignment
📄 Read: references/filtering-and-sorting.md
- Member filtering, label filtering, value filtering, sorting operations, filter customization
📄 Read separately if needed:
- references/member-filtering.md - Select/exclude specific members, interactive filter dialogs, append current selection to existing filters
- references/label-filtering.md - Filter by text patterns, date ranges, numeric ranges
- references/value-filtering.md - Filter by aggregated values, Top/Bottom N members (client-side), clearing value filter
- references/value-sorting.md - Sort by measure values, ranking analysis, multi-level sorting
📄 Read: references/show-hide-totals.md
- Grand totals display, group totals configuration, subtotal calculation options
📄 Read: references/state-persistence.md
- Save and load pivot table state, persistence configuration, state management patterns
📄 Read: references/toolbar.md
- Toolbar controls, button customization, toolbar events and actions
📄 Read: references/tooltip.md
- Tooltip configuration, custom tooltip templates, tooltip formatting
📄 Read: references/hyperlink.md
- Hyperlink configuration, cell linking, navigation setup, link customization
Navigation & Analysis
📄 Read: references/drill.md
- Drill-down and drill-through functionality, hierarchical data exploration, editing capabilities
📄 Read separately if needed:
- references/drill-down.md - Drill-down specific features
- references/drill-through.md - Drill-through and raw data exploration
Export & Output
📄 Read: references/export.md
- Excel export, PDF export, export configurations, custom export handlers
📄 Read separately if needed:
- references/excel-export.md - Excel export details
- references/pdf-export.md - PDF export details
📄 Read: references/print.md
- Pivot table printing, chart printing, print configurations, browser compatibility
Advanced & Performance
📄 Read: references/defer-update.md
- Deferred layout updates, Apply button, batch field operations, performance optimization for large datasets
📄 Read: references/performance.md
- Virtual scrolling, paging configuration, performance best practices, data compression
📄 Read separately if needed:
- references/virtual-scrolling.md - Efficient rendering of 100K+ rows, virtual scroll settings, responsive optimization
Quick Start
Install the Tailwind 3 theme package. Each component in this theme package includes an index.css file that automatically loads all required dependency styles.
npm install @syncfusion/ej2-tailwind3-theme --save
By default, Vite projects include an index.css file with default styles. These default styles may conflict with Syncfusion component styles. Clear all content from the index.css file to prevent style conflicts.
The required styles for the Pivot Table component are imported in the src/App.css file:
/* App.css */
@import '../node_modules/@syncfusion/ej2-tailwind3-theme/styles/pivotview/index.css';
import { PivotViewComponent, Inject, GroupingBar, FieldList, IDataSet } from '@syncfusion/ej2-react-pivotview';
import './App.css';
const pivotData: IDataSet[] = [
{ Country: 'USA', Product: 'Laptops', Sales: 5000, Year: 2020 },
{ Country: 'USA', Product: 'Mobiles', Sales: 3000, Year: 2020 },
{ Country: 'Canada', Product: 'Laptops', Sales: 2500, Year: 2020 },
{ Country: 'Canada', Product: 'Mobiles', Sales: 1500, Year: 2020 }
];
function cellTemplate(props: any): JSX.Element {
return (
<span style={{ fontWeight: 'bold', color: '#333' }}>
{props.cellInfo?.value}
</span>
);
}
function App() {
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: pivotData as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [{ name: 'Sales', caption: 'Total Sales' }],
showGrandTotals: true
};
return (
<PivotViewComponent
id="pivotview"
dataSourceSettings={dataSourceSettings}
cellTemplate={cellTemplate}
showGroupingBar={true}
showFieldList={true}
height={350}
>
<Inject services={[GroupingBar, FieldList]} />
</PivotViewComponent>
);
}
export default App;
Common Patterns
Pattern 1: Basic Pivot Table with Row and Column Fields
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }, { name: 'Region' }],
columns: [{ name: 'Year' }, { name: 'Quarter' }],
values: [{ name: 'Sales', caption: 'Total Sales' }]
};
Pattern 2: Adding Filters and Aggregation
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [
{ name: 'Sales', type: 'Sum' },
{ name: 'Quantity', type: 'Avg' }
],
filters: [{ name: 'Year' }]
};
Pattern 3: Calculated Fields
import { PivotViewComponent, Inject, CalculatedField, FieldList } from '@syncfusion/ej2-react-pivotview';
import { DataSourceSettingsModel } from '@syncfusion/ej2-pivotview/src/model/datasourcesettings-model';
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [
{ name: 'Sold', caption: 'Units Sold' },
{ name: 'Amount', caption: 'Amount' },
{ name: 'Total', caption: 'Total', type: 'CalculatedField' } // ← Must add to values
],
calculatedFieldSettings: [
{
name: 'Total',
formula: '"Sum(Amount)"+"Sum(Sold)"' // ← Formula with aggregation functions
}
]
};
Pattern 4: Cell Template with Conditional Formatting
function cellTemplate(props: any): JSX.Element {
const value = props.cellInfo?.value;
const isTotal = props.cellInfo?.isGrandTotal || props.cellInfo?.isDeserialized;
const getStyle = () => {
const numValue = parseFloat(value);
if (numValue > 4000) return { color: '#4CAF50', fontWeight: 'bold' }; // Green for high values
if (numValue < 1000) return { color: '#f44336', fontWeight: 'bold' }; // Red for low values
return { color: '#333' };
};
return (
<span style={getStyle()}>
{isTotal ? <strong>{value}</strong> : value}
</span>
);
}
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [{ name: 'Sales' }]
};
Key Props & Configuration
| Property |
Type |
Description |
dataSourceSettings |
object |
Configures data source, fields, rows, columns, values, filters, aggregations, calculated fields, and formatting |
cellTemplate |
function |
Custom cell rendering function that returns JSX.Element for value cells |
gridSettings |
GridSettings |
Configures row height, column width, text wrapping, resizing, reordering |
height |
string/number |
Component height in pixels or percentage |
width |
string/number |
Component width in pixels or percentage |
showGroupingBar |
boolean |
Shows/hides the grouping bar for drag-and-drop field management |
showFieldList |
boolean |
Shows/hides the field list panel (built-in or side panel) |
allowCalculatedField |
boolean |
Enables calculated field creation and editing via Field List dialog |
allowExcelExport |
boolean |
Enables Excel export functionality |
allowPdfExport |
boolean |
Enables PDF export functionality |
allowMemberFilter |
boolean |
Enables member filtering in Field List (select/deselect members) |
allowLabelFilter |
boolean |
Enables label filtering (filter by text/label values) |
allowValueFilter |
boolean |
Enables value filtering (filter by aggregated values) |
allowDrillThrough |
boolean |
Enables drill-through functionality to view pivot data |
allowConditionalFormatting |
boolean |
Enables conditional formatting for cells based on values |
allowDeferLayoutUpdate |
boolean |
Batches field operations in Field List, apply only on "Apply" click |
enableVirtualization |
boolean |
Enables virtual scrolling for large datasets |
enablePaging |
boolean |
Enables paging for row/column distribution |
showToolbar |
boolean |
Shows/hides the toolbar with preset actions |
pageSettings |
PageSettings |
Configures row and column page sizes for paging |
GridSettings Configuration
rowHeight: Specifies row height in pixels
columnWidth: Sets default column width
allowResizing: Enables column/row resizing
allowReordering: Allows drag-and-drop field reordering
allowTextWrap: Enables text wrapping in cells
columnRender: Event handler for column customization (e.g., text alignment)
Related Skills
- Syncfusion React Grid - For general data grid functionality
- React Data Binding - For data source management patterns
1---2name: syncfusion-react-pivot-table3description: Use this skill when users ask how to build or customize Syncfusion PivotView pivot tables in React. Trigger for React pivot grid/OLAP, aggregation, data binding (JSON/remote), drill-down/drill-through, grouping, filtering, conditional formatting, exports (Excel/PDF/CSV), or pivot charts. React-only, not Angular/Vue/Blazor.4---5
6# Implementing PivotView in React
7
8The Syncfusion React PivotView component enables powerful data analysis and reporting capabilities. It allows users to organize, analyze, and summarize multidimensional data through interactive pivot tables with features like grouping, filtering, aggregation, drill-down analysis, and export functionality.
9
10> ⚠️ **Important:** Always verify API class names, properties, and method signatures by consulting the **reference files in this skill** (`references/*.md`). These are maintained with verified, working examples. Do not assume API details from other sources.
11
12## ⚠️ Security Warning: Data Source Validation
13
14**CRITICAL SECURITY NOTICE:** When implementing pivot tables, always use trusted data sources. **Never** fetch or bind data from untrusted or user-provided URLs without proper validation and sanitization.
15
16### Security Best Practices:
17
181. **Use Local Data**: Prefer local, in-memory data sources for maximum security
192. **Validate Remote Sources**: Only connect to authenticated and authorized API endpoints under your control
203. **Sanitize User Input**: Never allow users to specify arbitrary URLs or data sources
214. **Implement Authentication**: Always use authentication headers and secure API endpoints
225. **Content Validation**: Validate and sanitize all data received from external sources before binding
236. **Use HTTPS**: Always use HTTPS for remote data connections
247. **Rate Limiting**: Implement rate limiting on API endpoints to prevent abuse
25
26### Security Risks:
27
28- **Indirect Prompt Injection**: Untrusted third-party data can contain malicious content that manipulates AI agent behavior
29- **Data Exfiltration**: Malicious data sources could attempt to extract sensitive information
30- **Code Injection**: Untrusted data may contain scripts or harmful content
31
32### Recommended Approach:
33
34✅ **DO**: Use controlled, authenticated backend APIs
35✅ **DO**: Implement server-side data validation
36✅ **DO**: Use environment variables for API endpoints
37✅ **DO**: Whitelist allowed data sources
38
39❌ **DON'T**: Accept user-provided URLs
40❌ **DON'T**: Bind to public, untrusted endpoints
41❌ **DON'T**: Skip data validation and sanitization
42❌ **DON'T**: Use HTTP for sensitive data
43
44## When to Use This Skill
45
46Use this skill when you need to:
47- Create interactive pivot tables for data analysis
48- Set up data aggregation and summarization
49- Build dynamic reporting dashboards
50- Configure row/column grouping with hierarchies
51- Implement data filtering and sorting
52- Add drill-down/drill-through capabilities
53- Export reports to Excel or PDF
54- Optimize performance for large datasets
55- Style and format pivot table display
56- Persist pivot table state across sessions
57
58## Navigation Guide
59
60### Setup
61📄 **Read:** [references/getting-started.md](references/getting-started.md)
62- Installation, package setup, basic component creation, CSS imports, NextJS integration
63
64📄 **Read (optional):** [references/nextjs-integration.md](references/nextjs-integration.md)
65- Next.js App Router and Pages Router setup, dynamic imports, SSR considerations, API routes, deployment
66
67### Data Management
68📄 **Read:** [references/data-binding.md](references/data-binding.md)
69- JSON data binding, CSV data binding, remote data binding, field mapping, DataManager setup
70
71📄 **Read:** [references/connecting-to-databases.md](references/connecting-to-databases.md)
72- Database connections, Web API setup, SQL Server, MySQL, PostgreSQL, MongoDB, Oracle, Elasticsearch, Snowflake
73
74📄 **Read:** [references/connecting-to-data-source.md](references/connecting-to-data-source.md)
75- OLAP connections, server-side engine configuration, real-time data updates
76
77### Visualization & Interaction
78📄 **Read:** [references/pivot-chart.md](references/pivot-chart.md)
79- Integrating pivot charts, chart types, visualization options, chart customization
80
81📄 **Read:** [references/classic-layout.md](references/classic-layout.md)
82- Classic layout configuration, layout switching, UI control options
83
84📄 **Read:** [references/drill.md](references/drill.md)
85- Drill-down and drill-through functionality, editing, navigation controls, event handling
86
87### Data Organization & Display
88📄 **Read:** [references/field-list.md](references/field-list.md)
89- In-built field list (popup), stand-alone field list (fixed), field list modes, UI interactions, configuration options
90
91📄 **Read:** [references/grouping-bar.md](references/grouping-bar.md)
92- Grouping bar configuration, drag-and-drop operations, filter/sort/remove icons, fields panel, value type icon, exclusion options
93
94📄 **Read:** [references/data-shaping.md](references/data-shaping.md)
95- Aggregation functions, calculated fields (defining and editing), summary customization options
96
97📄 **Read:** [references/aggregation.md](references/aggregation.md)
98- 24+ aggregation types (Sum, Average, Count, etc.), advanced aggregations, base field configuration, runtime modification
99
100📄 **Read:** [references/calculated-field.md](references/calculated-field.md)
101- Interactive calculated field dialog, formula syntax and operators, code-based methods, format settings
102
103📄 **Read:** [references/grouping.md](references/grouping.md)
104- Data grouping feature, number grouping with ranges, date grouping with hierarchies, programmatic configuration, ungrouping
105
106📄 **Read:** [references/data-formatting.md](references/data-formatting.md)
107- Number formatting, conditional formatting, cell styling, tooltip customization
108
109📄 **Read:** [references/grid-customization.md](references/grid-customization.md)
110- Cell templates, row heights, column widths, text alignment, column resizing and reordering, dimension configuration
111
112📄 **Read:** [references/row-and-column.md](references/row-and-column.md)
113- Cell template customization, dimension configuration, row height, column width, resizing, reordering, text alignment
114
115📄 **Read:** [references/filtering-and-sorting.md](references/filtering-and-sorting.md)
116- Member filtering, label filtering, value filtering, sorting operations, filter customization
117
118📄 **Read separately if needed:**
119- [references/member-filtering.md](references/member-filtering.md) - Select/exclude specific members, interactive filter dialogs, append current selection to existing filters
120- [references/label-filtering.md](references/label-filtering.md) - Filter by text patterns, date ranges, numeric ranges
121- [references/value-filtering.md](references/value-filtering.md) - Filter by aggregated values, Top/Bottom N members (client-side), clearing value filter
122- [references/value-sorting.md](references/value-sorting.md) - Sort by measure values, ranking analysis, multi-level sorting
123
124📄 **Read:** [references/show-hide-totals.md](references/show-hide-totals.md)
125- Grand totals display, group totals configuration, subtotal calculation options
126
127📄 **Read:** [references/state-persistence.md](references/state-persistence.md)
128- Save and load pivot table state, persistence configuration, state management patterns
129
130📄 **Read:** [references/toolbar.md](references/toolbar.md)
131- Toolbar controls, button customization, toolbar events and actions
132
133📄 **Read:** [references/tooltip.md](references/tooltip.md)
134- Tooltip configuration, custom tooltip templates, tooltip formatting
135
136📄 **Read:** [references/hyperlink.md](references/hyperlink.md)
137- Hyperlink configuration, cell linking, navigation setup, link customization
138
139### Navigation & Analysis
140📄 **Read:** [references/drill.md](references/drill.md)
141- Drill-down and drill-through functionality, hierarchical data exploration, editing capabilities
142
143📄 **Read separately if needed:**
144- [references/drill-down.md](references/drill-down.md) - Drill-down specific features
145- [references/drill-through.md](references/drill-through.md) - Drill-through and raw data exploration
146
147### Export & Output
148📄 **Read:** [references/export.md](references/export.md)
149- Excel export, PDF export, export configurations, custom export handlers
150
151📄 **Read separately if needed:**
152- [references/excel-export.md](references/excel-export.md) - Excel export details
153- [references/pdf-export.md](references/pdf-export.md) - PDF export details
154
155📄 **Read:** [references/print.md](references/print.md)
156- Pivot table printing, chart printing, print configurations, browser compatibility
157
158### Advanced & Performance
159📄 **Read:** [references/defer-update.md](references/defer-update.md)
160- Deferred layout updates, Apply button, batch field operations, performance optimization for large datasets
161
162📄 **Read:** [references/performance.md](references/performance.md)
163- Virtual scrolling, paging configuration, performance best practices, data compression
164
165📄 **Read separately if needed:**
166- [references/virtual-scrolling.md](references/virtual-scrolling.md) - Efficient rendering of 100K+ rows, virtual scroll settings, responsive optimization
167
168## Quick Start
169
170Install the [Tailwind 3](https://www.npmjs.com/package/@syncfusion/ej2-tailwind3-theme) theme package. Each component in this theme package includes an `index.css` file that automatically loads all required dependency styles.
171
172```bash
173npm install @syncfusion/ej2-tailwind3-theme --save
174```
175
176By default, Vite projects include an `index.css` file with default styles. These default styles may conflict with Syncfusion component styles. Clear all content from the `index.css` file to prevent style conflicts.
177
178The required styles for the Pivot Table component are imported in the **src/App.css** file:
179
180```css
181/* App.css */
182@import '../node_modules/@syncfusion/ej2-tailwind3-theme/styles/pivotview/index.css';
183```
184
185```typescript
186import { PivotViewComponent, Inject, GroupingBar, FieldList, IDataSet } from '@syncfusion/ej2-react-pivotview';
187import './App.css';
188
189const pivotData: IDataSet[] = [
190 { Country: 'USA', Product: 'Laptops', Sales: 5000, Year: 2020 },
191 { Country: 'USA', Product: 'Mobiles', Sales: 3000, Year: 2020 },
192 { Country: 'Canada', Product: 'Laptops', Sales: 2500, Year: 2020 },
193 { Country: 'Canada', Product: 'Mobiles', Sales: 1500, Year: 2020 }
194];
195
196function cellTemplate(props: any): JSX.Element {
197 return (
198 <span style={{ fontWeight: 'bold', color: '#333' }}>
199 {props.cellInfo?.value}
200 </span>
201 );
202}
203
204function App() {
205 const dataSourceSettings: DataSourceSettingsModel = {
206 dataSource: pivotData as IDataSet[],
207 rows: [{ name: 'Country' }],
208 columns: [{ name: 'Product' }],
209 values: [{ name: 'Sales', caption: 'Total Sales' }],
210 showGrandTotals: true
211 };
212
213 return (
214 <PivotViewComponent
215 id="pivotview"
216 dataSourceSettings={dataSourceSettings}
217 cellTemplate={cellTemplate}
218 showGroupingBar={true}
219 showFieldList={true}
220 height={350}
221 >
222 <Inject services={[GroupingBar, FieldList]} />
223 </PivotViewComponent>
224 );
225}
226
227export default App;
228```
229
230## Common Patterns
231
232### Pattern 1: Basic Pivot Table with Row and Column Fields
233```typescript
234const dataSourceSettings: DataSourceSettingsModel = {
235 dataSource: data as IDataSet[],
236 rows: [{ name: 'Country' }, { name: 'Region' }],
237 columns: [{ name: 'Year' }, { name: 'Quarter' }],
238 values: [{ name: 'Sales', caption: 'Total Sales' }]
239};
240```
241
242### Pattern 2: Adding Filters and Aggregation
243```typescript
244const dataSourceSettings: DataSourceSettingsModel = {
245 dataSource: data as IDataSet[],
246 rows: [{ name: 'Country' }],
247 columns: [{ name: 'Product' }],
248 values: [
249 { name: 'Sales', type: 'Sum' },
250 { name: 'Quantity', type: 'Avg' }
251 ],
252 filters: [{ name: 'Year' }]
253};
254```
255
256### Pattern 3: Calculated Fields
257```typescript
258import { PivotViewComponent, Inject, CalculatedField, FieldList } from '@syncfusion/ej2-react-pivotview';
259import { DataSourceSettingsModel } from '@syncfusion/ej2-pivotview/src/model/datasourcesettings-model';
260
261const dataSourceSettings: DataSourceSettingsModel = {
262 dataSource: data as IDataSet[],
263 rows: [{ name: 'Country' }],
264 columns: [{ name: 'Product' }],
265 values: [
266 { name: 'Sold', caption: 'Units Sold' },
267 { name: 'Amount', caption: 'Amount' },
268 { name: 'Total', caption: 'Total', type: 'CalculatedField' } // ← Must add to values
269 ],
270 calculatedFieldSettings: [
271 {
272 name: 'Total',
273 formula: '"Sum(Amount)"+"Sum(Sold)"' // ← Formula with aggregation functions
274 }
275 ]
276};
277```
278
279### Pattern 4: Cell Template with Conditional Formatting
280```typescript
281function cellTemplate(props: any): JSX.Element {
282 const value = props.cellInfo?.value;
283 const isTotal = props.cellInfo?.isGrandTotal || props.cellInfo?.isDeserialized;
284
285 const getStyle = () => {
286 const numValue = parseFloat(value);
287 if (numValue > 4000) return { color: '#4CAF50', fontWeight: 'bold' }; // Green for high values
288 if (numValue < 1000) return { color: '#f44336', fontWeight: 'bold' }; // Red for low values
289 return { color: '#333' };
290 };
291
292 return (
293 <span style={getStyle()}>
294 {isTotal ? <strong>{value}</strong> : value}
295 </span>
296 );
297}
298
299const dataSourceSettings: DataSourceSettingsModel = {
300 dataSource: data as IDataSet[],
301 rows: [{ name: 'Country' }],
302 columns: [{ name: 'Product' }],
303 values: [{ name: 'Sales' }]
304};
305```
306
307## Key Props & Configuration
308
309| Property | Type | Description |
310|----------|------|-----------|
311| `dataSourceSettings` | object | Configures data source, fields, rows, columns, values, filters, aggregations, calculated fields, and formatting |
312| `cellTemplate` | function | Custom cell rendering function that returns JSX.Element for value cells |
313| `gridSettings` | GridSettings | Configures row height, column width, text wrapping, resizing, reordering |
314| `height` | string/number | Component height in pixels or percentage |
315| `width` | string/number | Component width in pixels or percentage |
316| `showGroupingBar` | boolean | Shows/hides the grouping bar for drag-and-drop field management |
317| `showFieldList` | boolean | Shows/hides the field list panel (built-in or side panel) |
318| `allowCalculatedField` | boolean | Enables calculated field creation and editing via Field List dialog |
319| `allowExcelExport` | boolean | Enables Excel export functionality |
320| `allowPdfExport` | boolean | Enables PDF export functionality |
321| `allowMemberFilter` | boolean | Enables member filtering in Field List (select/deselect members) |
322| `allowLabelFilter` | boolean | Enables label filtering (filter by text/label values) |
323| `allowValueFilter` | boolean | Enables value filtering (filter by aggregated values) |
324| `allowDrillThrough` | boolean | Enables drill-through functionality to view pivot data |
325| `allowConditionalFormatting` | boolean | Enables conditional formatting for cells based on values |
326| `allowDeferLayoutUpdate` | boolean | Batches field operations in Field List, apply only on "Apply" click |
327| `enableVirtualization` | boolean | Enables virtual scrolling for large datasets |
328| `enablePaging` | boolean | Enables paging for row/column distribution |
329| `showToolbar` | boolean | Shows/hides the toolbar with preset actions |
330| `pageSettings` | PageSettings | Configures row and column page sizes for paging |
331
332### GridSettings Configuration
333- `rowHeight`: Specifies row height in pixels
334- `columnWidth`: Sets default column width
335- `allowResizing`: Enables column/row resizing
336- `allowReordering`: Allows drag-and-drop field reordering
337- `allowTextWrap`: Enables text wrapping in cells
338- `columnRender`: Event handler for column customization (e.g., text alignment)
339
340## Related Skills
341- Syncfusion React Grid - For general data grid functionality
342- React Data Binding - For data source management patterns