| name | grid-lite-to-igr-grid-migration |
| description | Step-by-step migration guide from Grid Lite (IgrGridLite) to the premium Ignite UI for React Data Grid (IgrGrid), covering every import, registration, component name, property, event, template, sorting, filtering, and toolbar API change. |
| user-invocable | true |
Ignite UI for React — Grid Lite → Premium Data Grid Migration
MANDATORY AGENT PROTOCOL
DO NOT write any code from memory. Grid APIs change between versions.
Before producing migration code:
- Read the user's existing component files to understand current Grid Lite usage (columns, templates, data binding,
dataPipelineConfiguration).
- Use the MCP server — call
get_doc or search_docs with framework: "react" to confirm API details when in doubt.
- Only then produce output — base all code on verified references, not memory.
When to Migrate from Grid Lite to Premium Grid
Migrate when you need any of the following features (not available in Grid Lite):
| Feature | Grid Lite | Premium Grid (IgrGrid) |
|---|
| Cell editing | ✗ | ✓ editable, rowEditable |
| Batch editing (with undo) | ✗ | ✓ Transaction service |
| Row adding / deleting | ✗ | ✓ rowEditable + IgrActionStrip |
| Row selection | ✗ | ✓ `rowSelection="single |
| Cell selection | ✗ | ✓ cellSelection |
| Column selection | ✗ | ✓ columnSelection |
| Paging | ✗ | ✓ IgrPaginator child |
| GroupBy | ✗ | ✓ groupingExpressions |
| Column summaries | ✗ | ✓ hasSummary on IgrColumn |
| Column pinning | ✗ | ✓ pinned on IgrColumn |
| Column moving | ✗ | ✓ moving={true} on grid |
| Master-detail rows | ✗ | ✓ IgrGrid row expansion |
| Excel / CSV export (toolbar) | ✗ | ✓ IgrGridToolbarExporter |
| Column hiding toolbar | ✗ | ✓ IgrGridToolbarHiding |
| Column pinning toolbar | ✗ | ✓ IgrGridToolbarPinning |
| Advanced filtering UI | ✗ | ✓ filterMode="excelStyleFilter" / IgrGridToolbarAdvancedFiltering |
| State persistence | ✗ | ✓ IgrGridState directive |
| Clipboard operations | ✗ | ✓ clipboardOptions |
| Action strip | ✗ | ✓ IgrActionStrip |
| Row drag and drop | ✗ | ✓ rowDraggable={true} |
Setup
npm install --save igniteui-react-grids
import { IgrGridModule, IgrGrid, IgrColumn, IgrPaginator,
IgrCellTemplateContext, IgrColumnTemplateContext } from "igniteui-react-grids";
import "igniteui-react-grids/grids/themes/light/bootstrap.css";
IgrGridModule.register();
Use @infragistics/igniteui-react-grids and the matching CSS path for the licensed package.
Check package.json — igniteui-grid-lite may be a standalone dependency alongside igniteui-react.
Minimal Migration Example
import { useRef, useState } from "react";
import { IgrGrid, IgrColumn, IgrGridModule } from "igniteui-react-grids";
import "igniteui-react-grids/grids/themes/light/bootstrap.css";
IgrGridModule.register();
export default function MyView() {
const gridRef = useRef<IgrGrid>(null);
const [data] = useState<Product[]>([]);
return (
<IgrGrid ref={gridRef} data={data} primaryKey="id" autoGenerate={false}
height="600px" allowFiltering={true}>
<IgrColumn field="name" header="Name" sortable={true} filterable={true} resizable={true} />
<IgrColumn field="price" header="Price" dataType="number" sortable={true} />
</IgrGrid>
);
}
Key additions vs Grid Lite:
primaryKey — required for editing, selection, row-targeted APIs
height — required for row virtualization
allowFiltering={true} on the grid — required for filter UI; filterable={true} on the column opts that column in
Cell Templates
Prop renamed: cellTemplate → bodyTemplate. Context type changes.
import { IgrCellTemplateContext } from "igniteui-react-grids";
const statusCell = (ctx: IgrCellTemplateContext) => (
<span style={{ color: ctx.cell.value === "Active" ? "green" : "red" }}>
{ctx.cell.value}
</span>
);
<IgrColumn field="status" bodyTemplate={statusCell} />
| Grid Lite | Premium Grid |
|---|
| Prop | cellTemplate | bodyTemplate |
| Value | ctx.value | ctx.cell.value or ctx.implicit |
| Row data | ctx.row.data | ctx.cell.row.data |
| Edit template | — | inlineEditorTemplate |
Header Templates
Prop name unchanged (headerTemplate); context type changes to IgrColumnTemplateContext from igniteui-react-grids.
import { IgrColumnTemplateContext } from "igniteui-react-grids";
const priceHeader = (ctx: IgrColumnTemplateContext) => (
<strong>{ctx.column.header}</strong>
);
<IgrColumn field="price" headerTemplate={priceHeader} />
Remote Data (replaces dataPipelineConfiguration)
For server-side operations, disable local sort/filter processing first by assigning noop strategies, then listen to the done events to issue new requests.
import { IgrGrid, IgrGridModule,
IgrNoopSortingStrategy, IgrNoopFilteringStrategy } from "igniteui-react-grids";
useEffect(() => {
if (!gridRef.current) return;
gridRef.current.sortStrategy = IgrNoopSortingStrategy.instance();
gridRef.current.filterStrategy = IgrNoopFilteringStrategy.instance();
}, []);
const handleSortingDone = async () => {
if (!gridRef.current) return;
setData(await dataService.sort(gridRef.current.sortingExpressions));
};
const handleFilteringDone = async () => {
if (!gridRef.current) return;
setData(await dataService.filter(gridRef.current.filteringExpressionsTree));
};
<IgrGrid ref={gridRef} data={data} primaryKey="id" height="600px"
onSortingDone={handleSortingDone} onFilteringDone={handleFilteringDone}>
{/* columns */}
</IgrGrid>
Programmatic Sort / Filter
import { SortingDirection, IgrNumberFilteringOperand } from "igniteui-react-grids";
gridRef.current.sort([{ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }]);
gridRef.current.clearSort('name');
gridRef.current.filter('age', 21, IgrNumberFilteringOperand.instance().condition('greaterThan'));
gridRef.current.clearFilter('age');
Common Enterprise Features
Editing
<IgrGrid data={data} primaryKey="id" rowEditable={true} onRowEditDone={handleRowEditDone} height="600px">
<IgrColumn field="name" editable={true} />
</IgrGrid>
Row Selection
<IgrGrid data={data} primaryKey="id" rowSelection="multiple" height="600px">
{}
</IgrGrid>
Paging
<IgrGrid data={data} primaryKey="id" height="600px">
<IgrPaginator perPage={15} />
</IgrGrid>
Summaries
<IgrColumn field="price" dataType="number" hasSummary={true} />
Toolbar + Export
Note: IgrExcelExporterService / IgrExcelExporterOptions (programmatic export) must be imported from "igniteui-react", not "igniteui-react-grids". The toolbar approach below does not need them.
import { IgrGrid, IgrColumn, IgrGridToolbar, IgrGridToolbarTitle,
IgrGridToolbarActions, IgrGridToolbarHiding, IgrGridToolbarPinning,
IgrGridToolbarExporter, IgrGridToolbarAdvancedFiltering,
IgrGridToolbarExportEventArgs, IgrGridModule } from "igniteui-react-grids";
IgrGridModule.register();
<IgrGrid data={data} primaryKey="id" height="600px" onToolbarExporting={handleExporting}>
<IgrGridToolbar>
<IgrGridToolbarTitle>Products</IgrGridToolbarTitle>
<IgrGridToolbarActions>
<IgrGridToolbarHiding />
<IgrGridToolbarPinning />
<IgrGridToolbarAdvancedFiltering />
<IgrGridToolbarExporter exportExcel={true} exportCSV={true} />
</IgrGridToolbarActions>
</IgrGridToolbar>
{/* columns */}
</IgrGrid>
const handleExporting = (e: IgrGridToolbarExportEventArgs) => {
e.detail.options.fileName = "MyExport";
};
Cleanup After Migration
- Remove all
dataPipelineConfiguration usage — replace with events (see Remote Data).
- Remove
IgrCellContext / IgrHeaderContext imports from igniteui-react/grid-lite.
- Uninstall
igniteui-grid-lite if no Grid Lite instances remain: npm uninstall igniteui-grid-lite.
Related Skills