Full-row editing

Full-row editing opens an entire row for edit at once: every editable cell shows an inline editor, a single Enter (or clicking away) commits all of them in one update, and Esc cancels the whole row. It's a form-style entry experience with the density of a grid.

Enable it

Set fullRowEditing (alongside enableInlineEditing) on <SvGrid>:

<SvGrid {data} {columns} enableInlineEditing fullRowEditing />

Open the live example: Full-row editing (Editing)

Supported editors

The full-row editor renders a lightweight inline control per editable column:

editorType Control
text / password text / password input
number number input
date / datetime / time native date / datetime-local / time input
checkbox checkbox
list / select / rich-select single-select dropdown from editorOptions

Per-column valueParser still runs on commit, so the same normalization you use for single-cell edits applies to full-row commits too.

Rich single-cell editors (chips multi-select, star rating, color, custom cellEditor snippets) render in cell editing. In full-row mode those columns fall back to a text input - use cell editing for a column that needs a bespoke control.

Cell vs full-row editing

Leave fullRowEditing off (the default) for classic cell editing: a double-click edits one cell, Tab moves to the next. Turn it on when your users think in records - onboarding forms, roster edits, CRUD tables - and want to fill or fix a whole row before saving.

Editing a whole row at once

fullRowEditing opens every editable cell in the row together, so a change that spans columns is one gesture and one commit rather than four. Tab moves between the cells; Escape abandons the row, not just the cell.

<script lang="ts">
  import { SvGrid, type GridColumns, type SvGridApi } from '@svgrid/grid'

  type Person = {
    id: number
    name: string
    email: string
    city: string
    age: number
    salary: number
  }

  const seed: Person[] = [
    { id: 1, name: 'Ada Lovelace',   email: '[email protected]',   city: 'London',   age: 36, salary: 142000 },
    { id: 2, name: 'Grace Hopper',   email: '[email protected]', city: 'New York', age: 45, salary: 168000 },
    { id: 3, name: 'Linus Torvalds', email: '[email protected]', city: 'Portland', age: 54, salary: 155000 },
  ]

  let rows = $state<Person[]>(seed.map((p) => ({ ...p })))

  const columns: GridColumns<Person> = [
    { field: 'name',  header: 'Name',  width: 180, editorType: 'text' },
    { field: 'city',  header: 'City',  width: 140, editorType: 'text' },
    { field: 'age',   header: 'Age',   width: 90,  editorType: 'number' },
  ]
</script>

<SvGrid data={rows} {columns} editable fullRowEditing />

Cell editing, for contrast

The same grid without the flag. Each cell commits on its own, which is what you want when edits are independent - a status toggle should not make someone tab through a name they did not intend to change.

<script lang="ts">
  import { SvGrid, type GridColumns, type SvGridApi } from '@svgrid/grid'

  type Person = {
    id: number
    name: string
    email: string
    city: string
    age: number
    salary: number
  }

  const seed: Person[] = [
    { id: 1, name: 'Ada Lovelace',   email: '[email protected]',   city: 'London',   age: 36, salary: 142000 },
    { id: 2, name: 'Grace Hopper',   email: '[email protected]', city: 'New York', age: 45, salary: 168000 },
    { id: 3, name: 'Linus Torvalds', email: '[email protected]', city: 'Portland', age: 54, salary: 155000 },
  ]

  let rows = $state<Person[]>(seed.map((p) => ({ ...p })))

  const columns: GridColumns<Person> = [
    { field: 'name',  header: 'Name',  width: 180, editorType: 'text' },
    { field: 'city',  header: 'City',  width: 140, editorType: 'text' },
    { field: 'age',   header: 'Age',   width: 90,  editorType: 'number' },
  ]
</script>

<SvGrid data={rows} {columns} editable />

See also

Related articles

  • Paste from Excel into a Svelte Data Grid - How to wire up clipboard paste so users can drop a copied Excel or Google Sheets block directly into SvGrid - TSV parsing, type coercion, validation, and row growth all covered.
  • A Fill Handle (Drag to Fill) in SvGrid - Build a working spreadsheet-style fill handle on top of SvGrid's cell selection and editing - pointer tracking, range highlighting, series fill, and undo/redo integration all covered.
  • An Editable Select / Dropdown Cell in SvGrid - Build a dropdown cell editor in SvGrid using a Svelte 5 snippet - constrain user input to a fixed option set while keeping sort, filter, and undo working on the underlying value.