How to add click listener or context menu to Vaadin's Grid column Header

Viewed 544

This question is similar to this. But I'm interested in Vaadin 14 as I am migrating old Table components to Grids. There no longer a HeaderClickListener. Therefore, how can you implement click listener on Grid header.

I don't mind adding a context menu with a column selection for copying, but as I understand it, there is no API to get data in a column?

1 Answers

In Vaadin 14 there is no HeaderClickListener. Instead you need to do something like this:

Column<MyBean> column = grid.addColumn(..)
HeaderRow headerRow = this.getHeaderRows().get(0); // Get first header row
Div component = new Div(); // Just example, anything that has click listener can be used
component.setText("Header");
headerRow.getCell(column).setComponent(component);
component.addClickListener(..);

Alternatively you can use GridContextMenu

grid.addColumn(..).setId("column");
GridContextMenu<MyBean> menu = grid.addContextMenu();
item.addMenuItemClickListener(event -> {
    Notification.show(selectedColumn);
});
menu.addGridContextMenuOpenedListener(event -> {
    // item is not present when clicking header
    if (!event.getItem().isPresent()) {
        event.getColumnId().ifPresent(id -> {
            selectedColumn = id;
        });
    } else {
        menu.close(); // Do not let menu open on body
    }
});
Related