@letar/forms

DataGrid

Editable data grid with sorting, filtering, pagination, and inline editing powered by TanStack Table

Overview

Form.Field.DataGrid is for editing large datasets (100+ rows) with sorting, filtering, and pagination. Unlike TableEditor (which is for creating new rows), DataGrid is for editing existing data.

When to Use

ScenarioComponent
Enter 5-50 new rows (order items)Form.Field.TableEditor
Edit/browse 100+ existing rowsForm.Field.DataGrid

Basic Usage

<Form initialValue={{ employees: data }} onSubmit={save}>
  <Form.Field.DataGrid
    name="employees"
    columns={[
      { name: 'name', editable: true, filter: 'text' },
      { name: 'salary', editable: true, align: 'right' },
      { name: 'department', editable: true, filter: 'text' },
    ]}
    pageSize={20}
    rowSelection
  />
  <Form.Button.Submit>Save</Form.Button.Submit>
</Form>

Props

PropTypeDefaultDescription
namestringrequiredArray field name
columnsDataGridColumnDef[]requiredColumn definitions
pageSizenumber20Rows per page
rowSelectionbooleanfalseEnable checkbox selection
onRowSave(row, index) => Promise<void>Row-level save callback
virtualizedbooleanfalseVirtual scrolling for 1000+ rows
virtualHeightstring'500px'Container height for virtualized mode
columnResizingbooleanfalseEnable column resize by dragging
size'sm' | 'md' | 'lg''sm'Table size

Column Definition

interface DataGridColumnDef {
  name: string
  label?: string
  editable?: boolean   // default: true
  filter?: 'text' | 'range' | 'select' | 'date'
  align?: 'left' | 'center' | 'right'
  width?: string
}

Features

  • Sorting — click column header to sort (↑ asc, ↓ desc)
  • Filtering — text input per column
  • Pagination — Previous/Next buttons, page number (disabled when virtualized)
  • Virtualization — smooth scrolling for 1000+ rows with virtualized={true}
  • Column resizing — drag column borders with columnResizing={true}
  • Column reordering — drag column headers to change order
  • Inline editing — click cell to edit, Enter to save, Escape to cancel
  • Diff highlighting — edited cells are highlighted in yellow
  • Row selection — checkbox per row, select all, bulk delete
  • Row-level saveonRowSave fires when a cell is edited
  • CSV export — download all data as CSV file

Live Example

Try the interactive example on forms-example.letar.best.

On this page