public class ColumnView : Widget, Accessible, Buildable, ConstraintTarget, Scrollable
`GtkColumnView` presents a large dynamic list of items using multiple columns with headers.
`GtkColumnView` uses the factories of its columns to generate a cell widget for each column, for each visible item and displays them together as the row for this item.
The [property@Gtk.ColumnView:show-row-separators] and [propertyGtk.ColumnView:show-column-separators] properties offer a simple way to display separators between the rows or columns.
`GtkColumnView` allows the user to select items according to the selection characteristics of the model. For models that allow multiple selected items, it is possible to turn on *rubberband selection*, using [property@Gtk.ColumnView:enable-rubberband].
The column view supports sorting that can be customized by the user by clicking on column headers. To set this up, the `GtkSorter` returned by [method@Gtk.ColumnView.get_sorter] must be attached to a sort model for the data that the view is showing, and the columns must have sorters attached to them by calling [method@Gtk.ColumnViewColumn.set_sorter]. The initial sort order can be set with [ method@Gtk.ColumnView.sort_by_column].
The column view also supports interactive resizing and reordering of columns, via Drag-and-Drop of the column headers. This can be enabled or disabled with the [property@Gtk.ColumnView:reorderable] and [property@Gtk.ColumnViewColumn:resizable] properties.
To learn more about the list widget framework, see the [overview](section-list-widget.html).
``` columnview.column-separators.navigation-sidebar ├── header │ ├── <column header> ┊ ┊ │ ╰── <column header> │ ├── listview │ ┊ ╰── [rubberband] ```
`GtkColumnView` uses a single CSS node named columnview. It may carry the .column-separators style class, when [ property@Gtk.ColumnView:show-column-separators] property is set. Header widgets appear below a node with name header. The rows are contained in a `GtkListView` widget, so there is a listview node with the same structure as for a standalone `GtkListView` widget. If [ property@Gtk.ColumnView:show-row-separators] is set, it will be passed on to the list view, causing its CSS node to carry the .separators style class. For rubberband selection, a node with name rubberband is used.
The main columnview node may also carry style classes to select the style of [list presentation](section-list-widget.html#list-styles): .rich-list, .navigation-sidebar or .data-table.
`GtkColumnView` uses the gtk_accessible_role_tree_grid role, header title widgets are using the gtk_accessible_role_column_header role. The row widgets are using the gtk_accessible_role_row role, and individual cells are using the gtk_accessible_role_grid_cell role