Column Virtualization Plugin
The Column Virtualization plugin improves performance for grids with many columns.
Installation
Section titled “Installation”import '@toolbox-web/grid/features/column-virtualization';Basic Usage
Section titled “Basic Usage”import { queryGrid } from '@toolbox-web/grid';import '@toolbox-web/grid/features/column-virtualization';
const grid = queryGrid('tbw-grid');grid.gridConfig = { columns: generateManyColumns(100), // Your column generator fitMode: 'fixed', // Required for column virtualization features: { columnVirtualization: true },};grid.rows = data;import '@toolbox-web/grid-react/features/column-virtualization';import { DataGrid } from '@toolbox-web/grid-react';import type { GridConfig } from '@toolbox-web/grid-react';
const gridConfig: GridConfig = { columns: generateManyColumns(100), fitMode: 'fixed', features: { columnVirtualization: true },};
function WideGrid({ data }) { return <DataGrid rows={data} gridConfig={gridConfig} style={{ height: '400px' }} />;}<script setup>import '@toolbox-web/grid-vue/features/column-virtualization';import { TbwGrid } from '@toolbox-web/grid-vue';import type { GridConfig } from '@toolbox-web/grid-vue';
const data = [{ col0: 'Row 1', col1: 'Value 1' }, { col0: 'Row 2', col1: 'Value 2' }];
const gridConfig: GridConfig = { columns: Array.from({ length: 100 }, (_, i) => ({ field: `col${i}`, header: `Column ${i + 1}`, width: 120, })), fitMode: 'fixed', features: { columnVirtualization: true },};</script>
<template> <TbwGrid :rows="data" :grid-config="gridConfig" style="height: 400px" /></template>Define everything inside gridConfig.features, exactly like the other frameworks. The side-effect import registers the feature so the adapter can bridge it.
import '@toolbox-web/grid-angular/features/column-virtualization';import { Component } from '@angular/core';import { Grid } from '@toolbox-web/grid-angular';import type { ColumnConfig, GridConfig } from '@toolbox-web/grid-angular';
@Component({ selector: 'app-wide-grid', imports: [Grid], template: ` <tbw-grid [rows]="rows" [gridConfig]="gridConfig" style="height: 400px; display: block;"> </tbw-grid> `,})export class WideGridComponent { rows = [...];
gridConfig: GridConfig = { columns: this.generateManyColumns(100), fitMode: 'fixed', features: { columnVirtualization: true }, };
generateManyColumns(count: number): ColumnConfig[] { return Array.from({ length: count }, (_, i) => ({ field: `col${i}`, header: `Column ${i + 1}`, width: 120, })); }}Default Column Virtualization
Section titled “Default Column Virtualization”DATA
Column countNumber of columns to generate
VIRTUALIZATION
ThresholdMin columns to enable virtualization
OverscanExtra columns rendered offscreen
Auto-enableAutomatically enable when column count exceeds threshold
<tbw-grid style="height: 400px;"></tbw-grid>import '@toolbox-web/grid';import { queryGrid } from '@toolbox-web/grid';import '@toolbox-web/grid/features/column-virtualization';
const grid = queryGrid('tbw-grid');
function generateColumns(count: number) { const columns = [{ field: 'id', header: 'ID', type: 'number', width: 60 }]; for (let i = 1; i < count; i++) { columns.push({ field: `col${i}`, header: `Column ${i}`, type: 'number', width: 100 }); } return columns;}
function generateRows(rowCount: number, colCount: number) { const rows = []; for (let r = 0; r < rowCount; r++) { const row: Record<string, number> = { id: r + 1 }; for (let c = 1; c < colCount; c++) { row[`col${c}`] = Math.floor(Math.random() * 1000); } rows.push(row); } return rows;}
function rebuild(columnCount = 50, threshold = 30, overscan = 3, autoEnable = true) { const columns = generateColumns(columnCount); const rows = generateRows(100, columnCount); grid.gridConfig = { columns, fitMode: 'fixed', features: { columnVirtualization: { autoEnable, threshold, overscan } }, }; grid.rows = rows;}
rebuild();Use the Column Count slider to add up to 1000 columns, and toggle Auto Enable to compare performance with and without virtualization.
Configuration Options
Section titled “Configuration Options”| Option | Type | Default | Description |
|---|---|---|---|
autoEnable | boolean | true | Auto-enable above threshold |
threshold | number | 30 | Column count threshold |
overscan | number | 3 | Extra columns to render |
Requirements
Section titled “Requirements”fitMode: 'fixed'— the plugin is designed for fixed-width column layouts- Columns should have explicit widths (columns without widths default to 100px)
Programmatic API
Section titled “Programmatic API”const plugin = grid.getPluginByName('columnVirtualization');
// Check if virtualization is currently activeconst active = plugin.getIsVirtualized();
// Get the visible column index rangeconst { start, end } = plugin.getVisibleColumnRange();
// Scroll a specific column into viewplugin.scrollToColumn(42);See Also
Section titled “See Also”- Performance — Performance optimization tips
- Pinned Columns — Sticky columns (excluded from virtualization)
AI assistants: For complete API documentation, implementation guides, and code examples for this library, see https://toolboxjs.com/llms-full.txt