Default settings applied to all columns.
Column defaults provide a way to set default values for all columns in your grid. These settings are applied to every column unless explicitly overridden in individual column definitions.
interface DataTableColumnDefaults<TData = any, TValue = any> {
size?: number;
minSize?: number;
maxSize?: number;
enableSorting?: boolean;
enableResizing?: boolean;
enablePinning?: boolean;
enableHiding?: boolean;
meta?: Partial<DataTableColumnMeta<TData, TValue>>;
}<DataTable
columns={columns}
columnDefaults={{
size: 150,
enableSorting: true,
enableResizing: true,
}}
{...}
/>number150columnDefaults={{
size: 200, // All columns default to 200px wide
}}number80columnDefaults={{
minSize: 100,
}}number800columnDefaults={{
maxSize: 600,
}}booleantruecolumnDefaults={{
enableSorting: true,
}}booleantruebooleantruebooleantruePartial<DataTableColumnMeta<TData, TValue>>Column-specific settings always override defaults:
Defaults are applied first, then column types, then column-specific settings:
Order of precedence: Column Defaults → Column Types → Column Definition
columnDefaults={{
enableResizing: true,
}}columnDefaults={{
enablePinning: true,
}}columnDefaults={{
enableHiding: true,
}}columnDefaults={{
meta: {
truncate: true,
filterType: 'text',
cellAlign: 'left',
},
}}<DataTable
columns={columns}
columnDefaults={{
size: 180,
minSize: 100,
maxSize: 500,
enableSorting: true,
enableResizing: true,
enablePinning: true,
enableHiding: true,
meta: {
truncate: true,
headerAlign: 'left',
cellAlign: 'left',
filterType: 'text',
},
}}
{...}
/>columnDefaults={{
size: 150,
minSize: 80,
maxSize: 400,
}}columnDefaults={{
enableSorting: false,
}}columnDefaults={{
meta: {
headerAlign: 'left',
cellAlign: 'left',
},
}}columnDefaults={{
meta: {
filterType: 'text',
truncate: true,
},
}}const columnDefaults = {
size: 150,
enableSorting: true,
};
const columns = [
{
accessorKey: 'name',
header: 'Name',
// Uses default size: 150
// Uses default enableSorting: true
},
{
accessorKey: 'id',
header: 'ID',
size: 80, // Overrides default
enableSorting: false, // Overrides default
},
];columnDefaults={{
enableSorting: false,
enableResizing: false,
enablePinning: false,
enableHiding: false,
}}columnDefaults={{
size: 120,
minSize: 60,
maxSize: 300,
meta: {
truncate: true,
},
}}columnDefaults={{
meta: {
headerAlign: 'right',
cellAlign: 'right',
filterType: 'number',
},
}}columnDefaults={{
size: 180,
minSize: 100,
maxSize: 600,
enableSorting: true,
enableResizing: true,
enablePinning: true,
enableHiding: true,
meta: {
truncate: true,
filterType: 'text',
enableFilterOperators: true,
},
}}const columnDefaults = {
size: 150,
enableSorting: true,
};
const columnTypes = {
currency: {
size: 120, // Overrides default
meta: { cellAlign: 'right' },
},
};
const columns = [
{
accessorKey: 'price',
header: 'Price',
type: 'currency',
size: 140, // Final override
// Result: size=140, cellAlign='right', enableSorting=true
},
];type User = {
id: string;
name: string;
email: string;
};
const columnDefaults: DataTableColumnDefaults<User> = {
size: 150,
enableSorting: true,
meta: {
truncate: true,
filterType: 'text',
},
};
<DataTable<User>
columnDefaults={columnDefaults}
{...}
/>columnDefaults={{
enableSorting: true,
enableResizing: true,
enableHiding: true,
meta: {
filterType: 'text',
},
}}columnDefaults={{
enableSorting: false,
enableResizing: false,
meta: {
truncate: false,
wrapText: true,
},
}}columnDefaults={{
size: 180,
enableSorting: true,
enableResizing: true,
enablePinning: true,
enableHiding: true,
meta: {
filterType: 'text',
enableFilterOperators: true,
editable: false, // Explicitly opt-in per column
},
}}columnDefaults={{
size: 120,
minSize: 80,
maxSize: 200,
enableResizing: false,
meta: {
truncate: true,
},
}}