Events
Current GridEvents reference for cell, selection, editing, scroll, sort, filter, lifecycle, and column events.
ZenGrid exposes typed events through grid.on() and grid.off(). Event names and
payloads come from the exported GridEvents interface.
Register Events
const onCellClick = (event) => { console.log(event.cell, event.value);};
grid.on('cell:click', onCellClick);grid.off('cell:click', onCellClick); 💡 Tip
Keep a reference to a handler when you need to remove it later with off().
Cell Events
grid.on('cell:click', ({ cell, value, nativeEvent }) => {});grid.on('cell:doubleClick', ({ cell, value, nativeEvent }) => {});grid.on('cell:contextMenu', ({ cell, value, nativeEvent }) => {});
grid.on('cell:beforeChange', ({ cell, oldValue, newValue, cancel }) => { if (!isValidValue(newValue)) cancel();});
grid.on('cell:change', ({ cell, oldValue, newValue }) => {});grid.on('cell:afterChange', ({ cell, oldValue, newValue }) => {});Selection Events
grid.on('selection:change', ({ ranges, previousRanges, isSelected }) => { const active = isSelected?.(0, 0) ?? false; updateSelectionToolbar(ranges, previousRanges, active);});
grid.on('selection:start', ({ startCell }) => {});grid.on('selection:end', ({ ranges }) => {});Editing Events
grid.on('edit:start', ({ cell, value }) => {});grid.on('edit:commit', ({ cell, oldValue, newValue }) => {});grid.on('edit:cancel', ({ cell, value }) => {});grid.on('edit:end', ({ cell, value, cancelled }) => {});Scroll Events
grid.on('scroll', ({ scrollTop, scrollLeft, visibleRange }) => { console.log(scrollTop, scrollLeft, visibleRange);});
grid.on('scroll:start', ({ scrollTop, scrollLeft }) => {});grid.on('scroll:end', ({ scrollTop, scrollLeft }) => {});Sort Events
grid.on('sort:beforeSort', ({ sortState, cancel }) => { if (sortState.length > 3) cancel();});
grid.on('sort:change', ({ sortState, previousSortState }) => {});grid.on('sort:afterSort', ({ sortState, rowsAffected }) => {});Filter Events
grid.on('filter:beforeFilter', ({ filterState, cancel }) => { if (!isFilterAllowed(filterState)) cancel();});
grid.on('filter:change', ({ filterState, previousFilterState }) => {});grid.on('filter:afterFilter', ({ filterState, rowsVisible, rowsHidden }) => {});
grid.on('filter:export', ({ state, rest, graphql, sql, previousState }) => { console.log(rest.queryString, graphql.where, sql.whereClause);});
grid.on('filter:start', ({ timestamp, filter }) => {});grid.on('filter:end', ({ timestamp, resultCount }) => {});grid.on('filter:error', ({ timestamp, error }) => {});grid.on('filter:clear', ({ timestamp }) => {});Focus And Keyboard Events
grid.on('focus:change', ({ cell, previousCell }) => {});grid.on('focus:in', ({ cell }) => {});grid.on('focus:out', ({ cell }) => {});
grid.on('key:down', ({ cell, key, nativeEvent, preventDefault }) => { if (key === 'Enter') preventDefault();});
grid.on('key:up', ({ cell, key, nativeEvent }) => {});grid.on('key:press', ({ cell, key, nativeEvent }) => {});Clipboard Events
grid.on('copy', ({ ranges, data }) => {});grid.on('cut', ({ ranges, data }) => {});grid.on('paste', ({ cell, data }) => {});Lifecycle And Data Events
grid.on('render:start', ({ timestamp }) => {});grid.on('render:end', ({ timestamp, duration }) => {});
grid.on('data:load', ({ rowCount, colCount }) => {});grid.on('data:change', ({ changes }) => {});
grid.on('loading:start', ({ timestamp, message }) => {});grid.on('loading:progress', ({ progress, message }) => {});grid.on('loading:end', ({ timestamp, duration }) => {});
grid.on('destroy', ({ timestamp }) => {});Column Events
grid.on('column:resize', ({ column, oldWidth, newWidth }) => {});grid.on('column:move', ({ column, oldIndex, newIndex }) => {});Undo, Warnings, And Errors
grid.on('undo-redo:change', ({ canUndo, canRedo, undoCount, redoCount }) => {});
grid.on('warning', ({ message, context }) => {});grid.on('error', ({ message, error, context }) => {});Type Imports
import type { GridEvents } from '@zengrid/core';
const onSortChange = (event: GridEvents['sort:change']) => { console.log(event.sortState);};
grid.on('sort:change', onSortChange);