Virtual scrollingWeb Worker offloadColumnar encodingServer-side dataServer-side grouping & exportRows pushed by the serverPaginationNumbered page buttonsInfinite scrollTransactionsAsync transactionsCell span / mergeColumn spanSortingAutomatic columnsCustom sort orderSort by magnitudeClick cycle per columnLarge integers (BigInt)Row animationReorder after sortingCalculated columnsColumns your users calculateResizingReorderingPinningAuto-size, fit & flexVisibility & chooserRename columns in the gridBands (multi-level headers)Wrapped header textFilter rowHeader filter popupQuick searchFilter panel barRelative date filtersYour own filter UIFind without filteringExternal filterYour own filter operatorsMulti filterFilter builderGrouping (one level)Group panelGroup columnSticky group headersMulti-level groupingGroup summariesEdit a group totalMaster-detailTree dataFooter column totalsTotals row placementCustom aggregationSelection statisticsRow selectionFocused rowDeferred selectionUnselectable rowsRange selectionColumn selection from the headerCell focus & keyboardCopyFill handleClipboard callbacksCut & pasteCell editingParse and write valuesCell formulasBatch editingRow editingForm editingPopup editingRow save statusCRUD handlersUndo / redoValidationPermissionsCustom editors & lookupsCSV exportExcel exportFormulas & links in exportsPDF exportStyled exportImport wizardThemes & palettesDensityCards on narrow screensLocalizationTooltipsRow numbersCell flashPinned rowsPin rows from the menuRow drag & dropSparklinesCell notesPrint layoutAligned gridsLoading & empty overlaysStatus barSide bar & tool panelsYour own side bar panelsChart data hookChart panelChart API, events & saved chartsBox plotWaterfall, funnel, treemap, heatmap & rangeScatter & bubble chartsChart titles, labels & legendStacked & 100% chartsCross-filter & zoomChart exportEventsImperative APIGrid state for AI modelsSaved viewsContext menusSSR & bundlers

Row save status

Free

A mark and an icon at the row’s edge while it has unsaved changes, is saving, has just saved or was refused, and the reason under a refused row with Retry and Delete row.

Try it: Change a cell and press Enter: the row’s edge turns blue while it saves, then green for a moment.

Read the guide →

Loading DataGrid…

About this DataGrid demo: Row save status

A mark and an icon at the row’s edge while it has unsaved changes, is saving, has just saved or was refused, and the reason under a refused row with Retry and Delete row.

Row save status is in the free Community edition (@kanunilabs/datagrid-react or @kanunilabs/datagrid): no licence key, no watermark, commercial use included. The grid above is the real component, not a recording — change it and the result is what your users get.

Guide: Row save status →

More in Editing

  • CRUD handlers — One call per row — the shape REST and SQL want.
  • Undo / redo — Full history with a public API and events.
  • Cell editing — Edit one cell at a time, committed on blur or Enter.
  • Parse and write values — Turn what the user typed into your value (“1,5” → 1.5), and write it your own way — nested objects, immutable stores.
  • Cell formulas — Type =A1*B2 into a cell: references stay on their cells through sorting and filtering, and the fill handle moves them.
  • Batch editing — Collect changes and save them together.