From d336bfa5bf20b8187f498a9f41c04d706bbe2a28 Mon Sep 17 00:00:00 2001 From: Anna Koskinen Date: Fri, 26 Feb 2021 15:49:47 +0200 Subject: Merged column headers should work within declarative Grid. (#12206) - null check to prevent NPE from the merged column headers - convert to internal columnIds for merge handling - use correct cell in merge handling - switch away from streams in merge handling for easier readability - regression test Fixes: #10464 --- server/src/main/java/com/vaadin/ui/Grid.java | 3 ++- .../vaadin/ui/components/grid/StaticSection.java | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'server/src/main/java/com/vaadin') diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java index 5d7534ae6a..dbde93b558 100644 --- a/server/src/main/java/com/vaadin/ui/Grid.java +++ b/server/src/main/java/com/vaadin/ui/Grid.java @@ -4762,7 +4762,8 @@ public class Grid extends AbstractListing implements HasComponents, for (Column c : getColumns()) { HeaderCell headerCell = getDefaultHeaderRow().getCell(c); if (headerCell.getCellType() == GridStaticCellType.TEXT) { - c.setCaption(headerCell.getText()); + String text = headerCell.getText(); + c.setCaption(text == null ? "" : text); } } } diff --git a/server/src/main/java/com/vaadin/ui/components/grid/StaticSection.java b/server/src/main/java/com/vaadin/ui/components/grid/StaticSection.java index 29af8bfc6c..96e374253a 100644 --- a/server/src/main/java/com/vaadin/ui/components/grid/StaticSection.java +++ b/server/src/main/java/com/vaadin/ui/components/grid/StaticSection.java @@ -290,18 +290,22 @@ public abstract class StaticSection> + columnIdsString + "'"); } - Stream.of(columnIds).forEach(this::addCell); - - Stream idsStream = Stream.of(columnIds); + CELL cell; if (colspan > 1) { - CELL newCell = createCell(); - addMergedCell(createCell(), - idsStream.collect(Collectors.toSet())); - newCell.readDesign(element, designContext); + Set columnGroup = new HashSet<>(); + for (String columnId : columnIds) { + addCell(columnId); + // convert the public columnIds into internal columnIds + columnGroup.add(getCell(columnId).getColumnId()); + } + cell = createCell(); + addMergedCell(cell, columnGroup); } else { - idsStream.map(this::getCell).forEach( - cell -> cell.readDesign(element, designContext)); + String columnId = columnIds[0]; + addCell(columnId); + cell = getCell(columnId); } + cell.readDesign(element, designContext); } } -- cgit v1.2.3