← Back to the manual

Migrating from PrimeNG Table to inandu-grid

A factual, side-by-side comparison for Angular apps moving off PrimeNG's p-table onto @inandu-solutions/grid-angular. Both are MIT-licensed — this isn't about unlocking paywalled features, it's about grouping, aggregates and export being built in rather than assembled from several PrimeNG pieces.

Try the live demo Read the full manual View on npm
Why teams migrate p-table is flexible but leaves you assembling row grouping, aggregate footers, Excel-compatible export and cell-range selection from separate PrimeNG building blocks (or writing them yourself). inandu-grid ships those as built-in, opt-in attributes on <inandu-grid>. If your app depends on p-table's column-group header spans, virtual scroll ships as core here rather than a separate module you assemble.

Setup & data binding

ConceptPrimeNGinandu-grid
Installprimengng add @inandu-solutions/grid-angular
Component<p-table> + <ng-template pTemplate><inandu-grid> + <inandu-column>
Row data[value][data]
Column definitions[columns] array + a pTemplate="header"/"body" pair of templatesone <inandu-column field title> per column, declared directly

PrimeNG's template-driven style, with header/body templates kept in sync by hand:

<p-table [value]="people" [paginator]="true" [rows]="25">
  <ng-template pTemplate="header">
    <tr><th pSortableColumn="name">Name</th><th pSortableColumn="age">Age</th></tr>
  </ng-template>
  <ng-template pTemplate="body" let-row>
    <tr><td>{{ row.name }}</td><td>{{ row.age }}</td></tr>
  </ng-template>
</p-table>

becomes one declarative element per column, no header/body template pair to keep in sync:

<inandu-grid [data]="people" [paging]="{ pageSize: 25 }">
  <inandu-column field="name" title="Name" sortable="true" />
  <inandu-column field="age" title="Age" type="number" sortable="true" />
</inandu-grid>

Feature equivalents

FeaturePrimeNG p-tableinandu-grid
SortingpSortableColumnsortable="true" per column, shift-click for multi-sort
Per-column filterpColumnFilter / column filter templatesfilter="yes" — type-aware popup built in
Global filter[globalFilterFields] + an external search inputfilter="true" on <inandu-grid> — search box included
Pagination[paginator]="true" + [rows][paging]="{ pageSize: 25 }"
Row groupingrowGroupMode="subheader" + groupRowsBygroupable="true" per column
Aggregates / totalsa separate <ng-template pTemplate="footer"> you write by handshowTotals + aggregate="sum" — computed and rendered for you
Cell range selectionnot built incellRangeSelection (+ multiRange)
Excel / CSV exportexportCSV() (CSV only, built in)CSV, plus SpreadsheetML .xls, plus PDF — all free
Row selection[(selection)] + selectionModeselectable="true"
Inline editingpEditableColumn + p-cellEditor templateseditable="true" per column, plus required/min/max/pattern/[validator] — no editor template boilerplate
Column resize / reorder[resizableColumns] / [reorderableColumns]on by default, opt out with resize="false" / reorder="false"
Frozen columnspFrozenColumnsticky="true" (or "right")
Virtual scroll[virtualScroll]="true" + [virtualScrollItemSize]virtualScroll, opt-in
Lazy / server-side rows[lazy]="true" + (onLazyLoad)serverSide + outputs; pairs with the .NET/EF Core companion for ASP.NET Core APIs

What's different

Migration checklist

Full API reference, every input/output, and runnable examples: see the user manual. Questions or migration issues: open an issue.