Row Forms in AdapTable

Row Forms in AdapTable

AdapTable Row Forms turn dense grids into clear, guided forms — so users can create, edit, clone and delete rows without fighting the spreadsheet

9 min readAugust 3, 2026

AdapTable provides multiple, out-of-the-box, features that take AG Grid to the next level for power users — an excellent example of this is Row Forms

Our users tell us that while Data Grids are brilliant for analysis, create, edit and clone still feels like spreadsheet chores, and do not integrate neatly into their other workflows.

This is why we developed Row Forms - to provide teams with a guided, record-oriented workflow, without giving up the unrivalled power of AG Grid underneath.

Danielle Nagler, CEO, AdapTable Tools

Data Grids are outstanding for scanning, comparing and bulk-editing data.

Data Grids are generally less friendly when someone needs to add a new record, or carefully amend several fields at once, or duplicate an existing row without mistyping a key.

AdapTable's Row Forms are designed precisely to solve that gap.

Important

  • Row Forms are specialised Adaptable Forms — with full validation, custom field types and buttons
  • Users can open Forms using Action Column buttons, and developers via Row Form API

Row Forms open up a popup Form, with one labelled control per column.

The result is that create / edit / clone / delete feel like a proper application workflow, while the grid remains the operational surface underneath.

Hint

You can keep fast inline cell editing, or switch to form-only editing for stricter data entry

FormWhat the user gets
CreateEmpty Form for a brand-new row
EditForm pre-filled with the current row
CloneForm pre-filled from an existing row (then saved as a new row)
DeleteNo visible Form — fires submission so your app can confirm / remove safely

In the Demo

  • The demo contains all 4 types of Row Forms:
    • Add New Row dashboard button → Create Form
    • Edit Action Column button (pinned left)
    • Clone Action Column button (also pinned left)
    • Delete Action Column button (pinned right)
  • In addition a number of other features have been enabled:
    • Inline cell editing is disabled — changes go through the Form
    • Primary keys are generated automatically for Create / Clone
    • Language and License use select editors (also shown in the Form)
    • GitHub Stars is read-only (shown in the Form without an input)
    • AdapTable auto-handles submission — no custom server wiring required for this demo
Row Forms in AdapTable
Fork
Loading demo…
Try It Out
  • Click Add New Row, fill a few fields, and Save — watch the new row appear at the top
  • Click Edit on a row, change Language or License, Save — the row flashes on change
  • Click Clone, tweak the Name, Save — a second row is created with a new Id
  • Click Delete on any row — an Alert confirms it’s been removed
  • Try double-clicking a cell to edit: inline editing is off, so the Form is the sole edit path

How Row Forms Help You

For product and ops teams, Row Forms are less about “another popup” and more about control:

  • Fewer mistakes — users see every field with a clear label, not a horizontal scroll of cells
  • Clearer policy — you can require the Form for edits (no casual cell tinkering)
  • Familiar UX — Create / Edit / Clone match how people already think about records
  • Safer delete — Delete still goes through AdapTable’s Form submission path, so you can hook validation, audit or a backend call

For developers, Row Forms sit on the same building blocks they already use in AdapTable, i.e. Forms, Buttons, Action Columns, Events etc.

Note

This ensures that the Row Forms scale from “works out of the box” to “fully custom workflow”

The 4 Row Form Types

There are 4 Row Forms available in AdapTable:

Create

Opens an empty Form based on your column / field structure.

This is often used for “New Order”, “Add Counterparty”, “Register Instrument” style flows

Creating a Row Form opens a completely blank form
Creating a Row Form opens a completely blank form

Hint

Use setPrimaryKeyValue in Row Form Options when users should not invent Ids themselves

Edit

Opens a dedicated, vertical, Form for the selected row.

Editing a Row Form opens a form with data from current row
Editing a Row Form opens a form with data from current row

Hint

Pair it with disableInlineEditing: true when the business rule is: edits only through the Form

Clone

Starts from an existing row and saves a new one.

Cloning a Row Form opens a form with data from current row
Cloning a Row Form opens a form with data from current row

Hint

This is perfect for “same as last week’s deal, but change date” or “duplicate trade but tweak two fields”

Delete

Unlike the other Row Form types, Delete does not render a Form UI.

However, Delete still fires the Row Form Submitted Event to inform you of the action.

Deleting a Row Form fires an Event which can trigger a Notification
Deleting a Row Form fires an Event which can trigger a Notification

Hint

This is what you want for confirmations, soft-delete, or server round-trips

Opening Row Forms

There are two common patterns to open a Row Form:

PatternBest for
Action Column Command (edit / clone / delete / create)Per-row actions in the grid
Row Form API (displayCreateRowForm, displayEditRowForm, …)Toolbar / dashboard buttons, menus, custom workflows

In the Demo

  • Add New Row opens the Create Form via the Row Form API:
dashboardOptions: {
  customDashboardButtons: [
    {
      label: 'Add New Row',
      onClick: (_button, context) => {
        context.adaptableApi.rowFormApi.displayCreateRowForm();
      },
    },
  ],
},
  • The Action Column uses the built-in edit, clone & delete commands — no bespoke modal code:
actionColumnOptions: {
  actionColumns: [
    {
      columnId: 'actions',
      friendlyName: 'Actions',
      actionColumnButton: [{ command: 'edit' }, { command: 'clone' }],
    },
    {
      columnId: 'delete',
      friendlyName: 'Delete',
      actionColumnButton: [{ command: 'delete' }],
    },
  ],
},

What Appears in the Form

Row Forms are vertical: label + control for each included column.

Note

Read-only columns show their value without an input

The Controls displayed in the Row Form follow the column’s data type:

Column Data TypeForm control
textText input
numberNumeric editor
dateDate picker
booleanCheckbox

Hint

  • Columns configured with a Select Cell Editor show that select in the Form too
  • Use includeColumnInRowForm to hide technical columns (Ids, Action Columns, etc.)

Other Possibilities

Form-only editing

Set disableInlineEditing: true when accidental cell edits are a risk (e.g. for compliance, or you have master data, or provide complex pricing).

In this scenario, AG Grid stays for analysis; the Row Form is the gate for changes.

Field-level configuration

Because a Row Form is an Adaptable Form, rowFormField can include full configuration options.

These include: required fields, patterns, help text, textareas, radios, sliders, hidden/disabled rules, and even custom widgets — per column and per Form type (Create vs Edit vs Clone).

Find Out More

See Configuring Row Forms and the Adaptable Form tutorial for the full field model.

Titles, descriptions and buttons

Customise the rowFormTitle, rowFormDescription and formButtons properties, when you need branded wording (e.g. “Save Order”) or additional actions alongside Cancel / Save.

Auto-handle vs your backend

By default AdapTable applies Create / Edit / Clone / Delete operations to AG Grid for you — ideal for prototypes and many internal tools.

For production APIs, set autoHandle: false and subscribe to the Row Form Submitted Event.

Hint

This allows you to validate, call the server, and only update AG Grid when the round-trip succeeds

rowFormOptions: {
  autoHandle: false,
},

// in AdaptableReady:
adaptableApi.eventApi.on('RowFormSubmitted', event => {
  // event.type: 'rowCreated' | 'rowEdited' | 'rowDeleted'
  // call your API, then update grid data when ready
});

Note

  • Clone submissions use the create path with pre-filled data
  • Your handler still decides how the new primary key and persisted record are produced

Which Approach Should I Use?

GoalApproach
Users must edit via a guided FormEdit Form + disableInlineEditing
Users often duplicate similar rowsClone Form
Toolbar “New …” actionCreate Form via Row Form API
Persist through your API / reject bad dataSet autoHandle:false and use Row Form Event
Hide Ids/action columns from FormLeverage includeColumnInRowForm
Required email, textarea notes, etc.rowFormField overrides

Hint

  • Many teams start with auto-handle + Action Columns
  • They then introduce event handling when the backend contract is ready

Note

Row Forms compose cleanly with ROW_ADDED/ROW_REMOVED Alerts & Flashing Cells for visual confirmation

FAQ

Do Row Forms replace inline editing? No. Inline editing remains available unless you set disableInlineEditing: true. Many apps keep both: quick cell tweaks in the grid, Form for fuller create / edit flows

Can I validate data before it enters the grid? Yes. Use field validation on the Form (required, pattern, …) so Save stays disabled until the Form is valid. For server-side checks, set autoHandle: false and handle Row Form Submitted Event yourself

How do primary keys work on Create / Clone? Implement setPrimaryKeyValue in Row Form Options so AdapTable can assign a unique Id when the user should not type one

Can I change which columns appear on the Form? Yes — includeColumnInRowForm decides inclusion per column. Read-only columns can still appear as display-only fields

Is Delete really a “Form” if nothing is shown? Delete uses the same submission pipeline (and Action Column command) without rendering fields — so your event listeners and policies stay consistent with Create / Edit / Clone