Column Reordering
Grid columns can be dragged & dropped.
| Date | Name | Continent | Browser | OS | Visits |
|---|---|---|---|---|---|
| 03/29/2026 | Quinten Gislason | South America | Internet Explorer | Ubuntu | 61 |
| 06/01/2026 | Loyce Swift | North America | Internet Explorer | Android | 5 |
| 06/13/2026 | Madie Kuhic | Europe | Internet Explorer | Android | 68 |
| 03/17/2026 | Danny Robel | North America | Firefox | Android | 64 |
| 05/03/2026 | Maximillia Hoppe | Australia | Edge | Ubuntu | 68 |
| 06/18/2026 | Monserrate Mohr | South America | Opera | iOS | 79 |
| 06/08/2026 | Philip Thiel | Antarctica | Safari | iOS | 85 |
| 03/24/2026 | Katarina Heathcote | Australia | Firefox | Mac OS | 24 |
| 05/28/2026 | Carol Rolfson | Africa | Chrome | Ubuntu | 30 |
| 05/09/2026 | Mozelle Langworth | Europe | Safari | iOS | 32 |
| 05/05/2026 | Mavis Yost | Australia | Opera | iOS | 29 |
| 06/06/2026 | Alexandria Jakubowski | North America | Safari | iOS | 49 |
| 04/12/2026 | Tressie Adams | Europe | Safari | iOS | 71 |
| 05/04/2026 | Jaquan Terry | North America | Safari | Android | 46 |
| 04/10/2026 | Sarina Strosin | Antarctica | Chrome | iOS | 98 |
| 06/16/2026 | Kirk Hansen | North America | Opera | Mac OS | 96 |
| 05/30/2026 | Merritt Altenwerth | North America | Opera | Windows | 73 |
| 04/16/2026 | Francis Wiza | Africa | Safari | Android | 86 |
| 06/13/2026 | Garrison Gibson | North America | Chrome | Ubuntu | 95 |
| 05/30/2026 | Ardella Greenfelder | Australia | Opera | Windows | 8 |
| 04/21/2026 | Zita Crist | Europe | Safari | Mac OS | 32 |
| 06/07/2026 | Lorenza Kuvalis | North America | Firefox | Ubuntu | 82 |
| 04/01/2026 | Braeden Cartwright | Europe | Firefox | Mac OS | 79 |
| 04/13/2026 | Trevor Nolan | Asia | Firefox | Windows | 86 |
| 06/20/2026 | Johan Klocko | Europe | Safari | Mac OS | 11 |
| 05/11/2026 | Maryse Koss | South America | Opera | Windows | 96 |
| 06/21/2026 | Lorenzo Heaney | Asia | Opera | Android | 65 |
| 06/06/2026 | Terrill Ullrich | Antarctica | Internet Explorer | Mac OS | 3 |
| 04/28/2026 | Tom Sipes | Europe | Safari | Android | 33 |
| 04/10/2026 | Jovanny Hauck | Africa | Internet Explorer | iOS | 16 |
| 04/20/2026 | Karianne Ritchie | Europe | Firefox | Ubuntu | 44 |
| 04/21/2026 | Kaela Bauch | Africa | Firefox | Android | 49 |
| 04/25/2026 | Guido Carter | Africa | Safari | Ubuntu | 69 |
| 04/06/2026 | Trenton Hand | Asia | Opera | Android | 31 |
| 05/14/2026 | Olaf Kulas | Europe | Opera | Mac OS | 2 |
| 06/01/2026 | Arvel Gleason | Antarctica | Opera | Ubuntu | 14 |
| 04/19/2026 | Zola Schultz | North America | Firefox | Windows | 65 |
| 03/26/2026 | Vita Williamson | South America | Internet Explorer | Android | 4 |
| 03/26/2026 | Gudrun Schiller | North America | Internet Explorer | Windows | 73 |
| 05/30/2026 | Wilhelmine Klocko | South America | Opera | Android | 22 |
| 04/22/2026 | Fletcher Donnelly | Asia | Firefox | iOS | 98 |
| 04/30/2026 | Sim Windler | Asia | Safari | iOS | 1 |
| 06/10/2026 | Melany Ledner | Antarctica | Edge | Ubuntu | 32 |
| 05/20/2026 | Marty Runolfsdottir | Europe | Edge | iOS | 60 |
| 05/31/2026 | Gladys Cronin | Antarctica | Opera | Mac OS | 95 |
| 05/09/2026 | Kristofer Mante | Australia | Opera | Android | 48 |
| 06/01/2026 | Rick Schowalter | South America | Firefox | Windows | 33 |
| 04/16/2026 | Jamir Doyle | Asia | Opera | Android | 35 |
| 03/19/2026 | Clair Parker | Antarctica | Edge | Android | 75 |
| 04/15/2026 | Shanna Bartell | Australia | Safari | Android | 19 |
| 04/29/2026 | Anthony Becker | Africa | Edge | Android | 40 |
| 04/05/2026 | Llewellyn Mann | Australia | Safari | Android | 7 |
| 05/09/2026 | Edmund Sipes | Europe | Edge | iOS | 35 |
| 04/24/2026 | Susana Hegmann | North America | Chrome | Android | 5 |
| 06/06/2026 | Shirley Pfannerstill | Africa | Opera | Windows | 40 |
| 04/08/2026 | Tommie Stiedemann | North America | Edge | Ubuntu | 15 |
| 03/24/2026 | Leonardo Von | South America | Edge | Mac OS | 33 |
| 06/10/2026 | Grace Weber | North America | Internet Explorer | Ubuntu | 100 |
| 06/18/2026 | Laverna Mueller | South America | Safari | Android | 33 |
| 06/09/2026 | Margarette Stehr | North America | Internet Explorer | Mac OS | 36 |
| Date | Name | Continent | Browser | OS | Visits |
|---|
To allow dragging grid column around, set draggable to true on each column.
There are two parts required to implement column reordering. The first part is dynamic column generation. The onGetColumns callback method
is invoked whenever columnParams change (in this example it's bound to $page.columnOrder) and it should return
the list of columns to be displayed. The list should be in the same format as when assigned to the columns property.
It's important to set a unique key for each column so that grid can correctly associate column meta data (such as column width)
and restore it on each configuration change.
The other part is implementing column drag & drop using onColumnDropTest and onColumnDrop callbacks.
The onColumnDropTest checks if the dragged object contains information required to make a successful column drop.
The logic for changing columns is implemented in onColumnDrop. In this example, columnOrder
and unusedColumns are modified and after that the grid automatically reflects the updated configuration.
<Grid records-bind="$page.records" mod="fixed-layout" scrollable buffered style="height: 500px;" lockColumnWidths columnParams-bind="$page.columnOrder" onGetColumns={(columnOrder) => columnOrder.map((key) => allColumns.find((c) => c.key == key))} onColumnDropTest={(e, instance) => (e.source.type == "grid-column" && e.source.gridInstance == instance) || e.source?.data.type == "unused-column" } onColumnDrop={(e, { store }) => { let key = e.source.type == "grid-column" ? e.source.column.key : e.source.data.key; let { index } = e.target; let columnOrder = store.get("$page.columnOrder"); let at = columnOrder.indexOf(key); let result = columnOrder.filter((c) => c != key); if (at >= 0 && at < index) index--; result = insertElement(result, index, key); store.set("$page.columnOrder", result); store.update("$page.unusedColumns", (unused) => unused.filter((c) => c != key)); }} />