Column Hide
RevoGrid provides the ability to hide specific columns in your grid, allowing you to focus on the most relevant data for your users. This feature is particularly useful when working with large datasets where not all columns need to be visible at once.
Source code
import { defineCustomElements } from '@revolist/revogrid/loader';import { ColumnHidePlugin, RowOddPlugin } from '@revolist/revogrid-pro';import { currentTheme } from '../composables/useRandomData';
defineCustomElements();
export function load(parentSelector: string) { const grid = document.createElement('revo-grid'); const { isDark } = currentTheme();
// Sample data grid.source = [ { name: 'John', age: 30 }, { name: 'Jane', age: 25 }, { name: 'Bob', age: 35 }, ];
// Define columns grid.columns = [ { prop: 'name', name: 'Name' }, { prop: 'age', name: 'Age' }, ];
// Set grid properties grid.className = 'cell-border'; grid.theme = isDark() ? 'darkMaterial' : 'material'; grid.style.minHeight = '200px'; grid.style.width = '100%'; grid.hideAttribution = true; grid.plugins = [ColumnHidePlugin, RowOddPlugin];
// Track hidden columns let hiddenColumns: string[] = [];
// Create checkboxes for column visibility const controls = document.createElement('div'); controls.className = 'controls';
const checkboxGroup = document.createElement('div'); checkboxGroup.className = 'checkbox-group';
['name', 'age'].forEach(prop => { const label = document.createElement('label'); const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.checked = true;
checkbox.addEventListener('change', () => { const index = hiddenColumns.indexOf(prop); if (index === -1) { hiddenColumns.push(prop); } else { hiddenColumns.splice(index, 1); }
// Update the grid's additionalData grid.additionalData = { hiddenColumns }; });
label.appendChild(checkbox); label.appendChild(document.createTextNode(prop === 'name' ? 'Name' : 'Age')); checkboxGroup.appendChild(label); });
controls.appendChild(checkboxGroup);
// Create container const container = document.createElement('div'); container.className = 'column-hide-example'; container.appendChild(controls); container.appendChild(grid); document.querySelector(parentSelector)?.appendChild(container);}
<template> <div class="column-hide-example"> <div class="controls"> <div class="checkbox-group"> <label> <input type="checkbox" :checked="!hiddenColumns.includes('name')" @change="toggleColumn('name')" /> Name </label> <label> <input type="checkbox" :checked="!hiddenColumns.includes('age')" @change="toggleColumn('age')" /> Age </label> </div> </div> <RevoGrid class="cell-border" :theme="isDark ? 'darkMaterial' : 'material'" :source="source" :columns="columns" :plugins="plugins" :additionalData="{ hiddenColumns }" hide-attribution style="min-height: 200px; width: 100%" /> </div></template>
<script setup lang="ts">import { ref } from 'vue';import RevoGrid from '@revolist/vue3-datagrid';import { ColumnHidePlugin, RowOddPlugin } from '@revolist/revogrid-pro';import { currentThemeVue } from '../composables/useRandomData';
const { isDark } = currentThemeVue();
// Sample dataconst source = [ { name: 'John', age: 30 }, { name: 'Jane', age: 25 }, { name: 'Bob', age: 35 },];
// Define columnsconst columns = [ { prop: 'name', name: 'Name' }, { prop: 'age', name: 'Age' },];const plugins = [ColumnHidePlugin, RowOddPlugin];
// Track hidden columnsconst hiddenColumns = ref<string[]>([]);
// Toggle column visibilityconst toggleColumn = (prop: string) => { const index = hiddenColumns.value.indexOf(prop); if (index === -1) { hiddenColumns.value.push(prop); } else { hiddenColumns.value.splice(index, 1); }};</script>
<style scoped>.column-hide-example { display: flex; flex-direction: column; gap: 20px;}
.controls { padding: 10px; background-color: #f5f5f5; border-radius: 4px;}
.checkbox-group { display: flex; gap: 20px;}
.checkbox-group label { display: flex; align-items: center; gap: 5px;}</style>
import React, { useState } from 'react';import { RevoGrid } from '@revolist/react-datagrid';import { ColumnHidePlugin, RowOddPlugin } from '@revolist/revogrid-pro';
// Define columnsconst columns = [ { prop: 'name', name: 'Name' }, { prop: 'age', name: 'Age' },];
const plugins = [ColumnHidePlugin, RowOddPlugin];const ColumnHideExample: React.FC = () => { // Sample data const [source] = useState([ { name: 'John', age: 30 }, { name: 'Jane', age: 25 }, { name: 'Bob', age: 35 }, ]);
// Track hidden columns const [hiddenColumns, setHiddenColumns] = useState<string[]>([]);
// Toggle column visibility const toggleColumn = (prop: string) => { setHiddenColumns(prev => { const index = prev.indexOf(prop); if (index === -1) { return [...prev, prop]; } else { const newHidden = [...prev]; newHidden.splice(index, 1); return newHidden; } }); };
return ( <div className="column-hide-example"> <div className="controls"> <div className="checkbox-group"> <label> <input type="checkbox" checked={!hiddenColumns.includes('name')} onChange={() => toggleColumn('name')} /> Name </label> <label> <input type="checkbox" checked={!hiddenColumns.includes('age')} onChange={() => toggleColumn('age')} /> Age </label> </div> </div> <RevoGrid source={source} columns={columns} plugins={plugins} additionalData={{ hiddenColumns }} hideAttribution /> </div> );};
export default ColumnHideExample;
import { Component } from '@angular/core';import { RevoGrid } from '@revolist/angular-datagrid';import { ColumnHidePlugin, RowOddPlugin } from '@revolist/revogrid-pro';
@Component({ selector: 'app-column-hide', standalone: true, imports: [RevoGrid], template: ` <div class="column-hide-example"> <div class="controls"> <div class="checkbox-group"> <label> <input type="checkbox" [checked]="!hiddenColumns.includes('name')" (change)="toggleColumn('name')" /> Name </label> <label> <input type="checkbox" [checked]="!hiddenColumns.includes('age')" (change)="toggleColumn('age')" /> Age </label> </div> </div> <revo-grid class="cell-border" [theme]="theme" [source]="source" [columns]="columns" [plugins]="plugins" [additionalData]="{ hiddenColumns }" [hideAttribution]="true" ></revo-grid> </div> `})export class ColumnHideComponent { // Sample data source = [ { name: 'John', age: 30 }, { name: 'Jane', age: 25 }, { name: 'Bob', age: 35 }, ];
// Define columns columns = [ { prop: 'name', name: 'Name' }, { prop: 'age', name: 'Age' }, ];
plugins = [ColumnHidePlugin, RowOddPlugin]; theme = 'material';
// Track hidden columns hiddenColumns: string[] = [];
// Toggle column visibility toggleColumn(prop: string) { const index = this.hiddenColumns.indexOf(prop); if (index === -1) { this.hiddenColumns.push(prop); } else { this.hiddenColumns.splice(index, 1); } }}
Column hiding
is a feature that allows you to hide specific columns in your grid, making them invisible to users. This is useful for:
- Focusing on specific data points
- Reducing visual clutter
- Creating different views of the same dataset
- Implementing column visibility toggles
The ColumnHidePlugin
supports two main approaches for hiding columns:
Using the hide-column
Attribute
You can specify which columns to hide using the hide-column
attribute on your RevoGrid element:
<!-- Vue/Svelte --><revo-grid hide-column="1,2,3"></revo-grid><!-- or with dynamic binding --><revo-grid :hide-column="[1,2,3]"></revo-grid>
<!-- React --><RevoGrid hideColumn="1,2,3" />
<!-- Angular --><revo-grid [hideColumn]="[1,2,3]"></revo-grid>
Using additionalData
You can also hide columns programmatically using the additionalData
property:
const grid = document.querySelector('revo-grid');grid.additionalData = { hiddenColumns: [1, 2, 3] // Hide columns with indices 1, 2, and 3};
This approach is particularly useful when you need to dynamically update which columns are hidden based on user interactions or application state.
Events
The ColumnHidePlugin
emits a hiddencolumnsupdated
event whenever the hidden columns are updated:
grid.addEventListener('hiddencolumnsupdated', (event) => { const { hiddenColumns } = event.detail; console.log('Hidden columns updated:', hiddenColumns);});
This event can be used to synchronize the UI with the current state of hidden columns.
Implementation Details
The ColumnHidePlugin
works by:
- Tracking which columns should be hidden in a
Set
- Updating the column visibility when the configuration changes
- Preserving the hidden state when columns are updated
- Supporting both attribute-based and programmatic configuration