DevExtreme v23.2 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

Column Chooser

To change column visibility at runtime, set the columnChooser.enabled property to true. To make certain that a given column(s) always stay visible, set the columns[].allowHiding property to false.

To display the column chooser, click the appropriate toolbar button above the DataGrid. You can specify the column chooser's position via the columnChooser.position property. The manner in which users can display/hide columns depends on columnChooser.mode:

  • "dragAndDrop"
    Users can drag and drop column headers to and from the column chooser.

  • "select"
    Users can select and deselect check boxes with column names.

In "select" mode, you can choose whether parent element selection affects child/nested elements. Use the selection.recursive property for this purpose.

If the column chooser contains multiple hidden columns, you can enable the DevExtreme Grid’s column search UI. Assign true to the search.enabled property for this purpose.

In this demo, use the check boxes below the DataGrid to toggle search and selection features.

To hide a column in code, set the columns[].visible property to false.

Backend API
const columnChooserModes = [{ key: 'dragAndDrop', name: 'Drag and drop', }, { key: 'select', name: 'Select', }]; $(() => { const dataGrid = $('#employees').dxDataGrid({ dataSource: employees, keyExpr: 'ID', columns: [{ dataField: 'FirstName', allowHiding: false, }, 'LastName', 'Position', 'City', 'State', { caption: 'Contacts', columns: [{ dataField: 'MobilePhone', allowHiding: false, }, 'Email', { dataField: 'Skype', visible: false, }], }, { dataField: 'HireDate', dataType: 'date', }], columnAutoWidth: true, showRowLines: true, width: '100%', showBorders: true, columnChooser: { enabled: true, mode: columnChooserModes[1].key, position: { my: 'right top', at: 'right bottom', of: '.dx-datagrid-column-chooser-button', }, search: { enabled: true, editorOptions: { placeholder: 'Search column' }, }, selection: { recursive: true, selectByClick: true, allowSelectAll: true, }, }, }).dxDataGrid('instance'); $('#columnChooserMode').dxSelectBox({ items: columnChooserModes, value: columnChooserModes[1].key, inputAttr: { 'aria-label': 'Column Chooser Mode' }, valueExpr: 'key', displayExpr: 'name', onValueChanged(data) { dataGrid.option('columnChooser.mode', data.value); const isDragMode = columnChooserModes[0].key === data.value; $('#allowSelectAll').dxCheckBox('instance').option('disabled', isDragMode); $('#selectByClick').dxCheckBox('instance').option('disabled', isDragMode); $('#recursive').dxCheckBox('instance').option('disabled', isDragMode); }, }); $('#searchEnabled').dxCheckBox({ text: 'Search enabled', value: true, onValueChanged(data) { dataGrid.option('columnChooser.search.enabled', data.value); }, }); $('#allowSelectAll').dxCheckBox({ text: 'Allow select all', value: true, onValueChanged(data) { dataGrid.option('columnChooser.selection.allowSelectAll', data.value); }, }); $('#selectByClick').dxCheckBox({ text: 'Select by click', value: true, onValueChanged(data) { dataGrid.option('columnChooser.selection.selectByClick', data.value); }, }); $('#recursive').dxCheckBox({ text: 'Recursive', value: true, onValueChanged(data) { dataGrid.option('columnChooser.selection.recursive', data.value); }, }); });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/23.2.5/css/dx.light.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.2/jszip.min.js"></script> <script src="js/dx.all.js"></script> <script src="data.js"></script> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="index.js"></script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="employees"></div> <div class="options"> <div class="caption">Options</div> <div class="selectboxes-container"> <div class="option"> <span>Column chooser mode</span> <div id="columnChooserMode"></div> </div> </div> <div class="checkboxes-container"> <div class="option"> <div id="searchEnabled"></div> </div> <div class="option"> <div id="allowSelectAll"></div> </div> <div class="option"> <div id="selectByClick"></div> </div> <div class="option"> <div id="recursive"></div> </div> </div> </div> </div> </body> </html>
#employees { max-height: 440px; } .options { padding: 20px; margin-top: 20px; background-color: rgba(191, 191, 191, 0.15); } .caption { font-size: 18px; font-weight: 500; } .option { margin-top: 10px; } .option > span { margin-right: 10px; } .option > .dx-selectbox { display: inline-block; vertical-align: middle; } .selectbox-container { display: flex; } .checkboxes-container { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; margin-top: 15px; } .checkboxes-container > .option { margin: 10px 30px 10px 0; width: 200px; }
const employees = [{ ID: 1, FirstName: 'John', LastName: 'Heart', Position: 'CEO', BirthDate: '1964/03/16', HireDate: '1995/01/15', Title: 'Mr.', Address: '351 S Hill St.', City: 'Los Angeles', State: 'California', Zipcode: 90013, Email: 'jheart@dx-email.com', Skype: 'jheartDXskype', HomePhone: '(213) 555-9208', DepartmentID: 6, MobilePhone: '(213) 555-9392', }, { ID: 2, FirstName: 'Olivia', LastName: 'Peyton', Position: 'Sales Assistant', BirthDate: '1981/06/03', HireDate: '2012/05/14', Title: 'Mrs.', Address: '807 W Paseo Del Mar', City: 'Los Angeles', State: 'California', Zipcode: 90036, Email: 'oliviap@dx-email.com', Skype: 'oliviapDXskype', HomePhone: '(310) 555-2728', DepartmentID: 5, MobilePhone: '(818) 555-2387', }, { ID: 3, FirstName: 'Robert', LastName: 'Reagan', Position: 'CMO', BirthDate: '1974/09/07', HireDate: '2002/11/08', Title: 'Mr.', Address: '4 Westmoreland Pl.', City: 'Bentonville', State: 'Arkansas', Zipcode: 91103, Email: 'robertr@dx-email.com', Skype: 'robertrDXskype', HomePhone: '(818) 555-2438', DepartmentID: 6, MobilePhone: '(818) 555-2387', }, { ID: 4, FirstName: 'Greta', LastName: 'Sims', Position: 'HR Manager', BirthDate: '1977/11/22', HireDate: '1998/04/23', Title: 'Ms.', Address: '1700 S Grandview Dr.', State: 'Georgia', City: 'Atlanta', Zipcode: 91803, Email: 'gretas@dx-email.com', Skype: 'gretasDXskype', HomePhone: '(818) 555-0976', DepartmentID: 5, MobilePhone: '(818) 555-6546', }, { ID: 5, FirstName: 'Brett', LastName: 'Wade', Position: 'IT Manager', BirthDate: '1968/12/01', HireDate: '2009/03/06', Title: 'Mr.', Address: '1120 Old Mill Rd.', State: 'Idaho', City: 'Boise', Zipcode: 91108, Email: 'brettw@dx-email.com', Skype: 'brettwDXskype', HomePhone: '(626) 555-5985', DepartmentID: 7, MobilePhone: '(626) 555-0358', }, { ID: 6, FirstName: 'Sandra', LastName: 'Johnson', Position: 'Controller', BirthDate: '1974/11/15', HireDate: '2005/05/11', Title: 'Mrs.', Address: '4600 N Virginia Rd.', State: 'Utah', City: 'Beaver', Zipcode: 90807, Email: 'sandraj@dx-email.com', Skype: 'sandrajDXskype', HomePhone: '(562) 555-8272', DepartmentID: 5, MobilePhone: '(562) 555-2082', }, { ID: 7, FirstName: 'Kevin', LastName: 'Carter', Position: 'Shipping Manager', BirthDate: '1978/01/09', HireDate: '2009/08/11', Title: 'Mr.', Address: '424 N Main St.', State: 'California', City: 'San Diego', Zipcode: 90012, Email: 'kevinc@dx-email.com', Skype: 'kevincDXskype', HomePhone: '(213) 555-8038', DepartmentID: 3, MobilePhone: '(213) 555-2840', }, { ID: 8, FirstName: 'Cynthia', LastName: 'Stanwick', Position: 'HR Assistant', BirthDate: '1985/06/05', HireDate: '2008/03/24', Title: 'Ms.', Address: '2211 Bonita Dr.', City: 'Little Rock', State: 'Arkansas', Zipcode: 90265, Email: 'cindys@dx-email.com', Skype: 'cindysDXskype', HomePhone: '(818) 555-6808', DepartmentID: 4, MobilePhone: '(818) 555-6655', }, { ID: 9, FirstName: 'Kent', LastName: 'Samuelson', Position: 'Ombudsman', BirthDate: '1972/09/11', HireDate: '2009/04/22', Title: 'Dr.', Address: '12100 Mora Dr', City: 'St. Louis', State: 'Missouri', Zipcode: 90272, Email: 'kents@dx-email.com', Skype: 'kentsDXskype', HomePhone: '(562) 555-1328', DepartmentID: 26, MobilePhone: '(562) 555-9282', }, { ID: 10, FirstName: 'Taylor', LastName: 'Riley', Position: 'Network Admin', BirthDate: '1982/08/14', HireDate: '2012/04/14', Title: 'Mr.', Address: '7776 Torreyson Dr', City: 'San Jose', State: 'California', Zipcode: 90012, Email: 'taylorr@dx-email.com', Skype: 'taylorrDXskype', HomePhone: '(310) 555-9712', DepartmentID: 5, MobilePhone: '(310) 555-7276', }];