В зависимости от того, что вам нужно и насколько сложно ваше приложение, вы можете fake
что-то с некоторыми (возможно, незначительными) усилиями. Ниже вы можете найти простой пример, который должен вас начать.
1) Общий класс для использования с BeanItemContainer
, чтобы отобразить оба категорий строк
public abstract class Row {
private String name;
private int amount;
public Row(String name, int amount) {
this.name = name;
this.amount = amount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
// provide a custom style/type for the current row
public abstract String getRowType();
}
2) Регулярной строка продукта
public class ProductRow extends Row {
public ProductRow(String name, int amount) {
super(name, amount);
}
@Override
public String getRowType() {
return "product-row";
}
}
3) Специальный строки для отображения общего для предыдущая партия продуктов
public class TotalRow extends Row {
public TotalRow(int sum) {
super("Total", sum);
}
@Override
public String getRowType() {
return "total-row";
}
}
4) Сама сетка
public class GridWithIntermediateRowsComponent extends VerticalLayout {
private static final String[] AVAILABLE_PRODUCTS = new String[]{"Banana", "Apple", "Coconut", "Pineapple", "Melon"};
private Random random = new Random();
public GridWithIntermediateRowsComponent() {
BeanItemContainer<Row> container = new BeanItemContainer<>(Row.class);
Grid grid = new Grid(container);
// show only the relevant columns, the style one is used only to change the background
grid.setColumns("name", "amount");
// set a style generator so we can draw the "total" rows differently
grid.setCellStyleGenerator(row -> ((Row) row.getItemId()).getRowType());
// create some dummy data to display
for (int i = 0; i < random.nextInt(10) + 1; i++) {
container.addAll(createItemBatch(random.nextInt(5) + 1));
}
addComponent(grid);
}
private List<Row> createItemBatch(int total) {
List<Row> rows = new ArrayList<>(total + 1);
// add a batch of products
String product = AVAILABLE_PRODUCTS[random.nextInt(AVAILABLE_PRODUCTS.length)];
for (int i = 0; i < total; i++) {
rows.add(new ProductRow(product, random.nextInt(100) + 1));
}
// calculate and add a "total row"
rows.add(calculateTotal(rows));
return rows;
}
private Row calculateTotal(List<Row> rows) {
return new TotalRow(rows.stream().mapToInt(Row::getAmount).sum());
}
}
5) стили Тема
@mixin mytheme {
@include valo;
// Insert your own theme rules here
.v-grid-row > td.total-row {
background-color: #c4e7b7;
font-weight: bold;
}
}
6) Результат
Спасибо за подробный ответ. Так что, в основном, моим единственным выбором было бы добавить дополнительную строку с необходимой информацией + CSS-стиль, который как специальная строка? Я действительно надеялся, что смогу также присоединиться к колонке, как вы можете сделать в заголовках. Я бы предпочел, чтобы над несколькими сетками друг под другом – LML
Из того, что я читал, вы также не можете делать colspan в сетке? В то время как я любил сетку для ее простой настройки редактирования, манипуляции для отображения, похоже, сильно ограничены. Является ли таблица в основном устаревшей со времен Grid или она позволяет использовать лучшие варианты для этого? – LML
@LML Насколько я знаю, [spanning является только сторонником в верхних и нижних колонтитулах] (https://vaadin.com/docs/-/part/framework/components/components-grid.html#components.grid.headerfooter. присоединение) в настоящее время. Вы правы, [таблица устарела с сетки] (http://stackoverflow.com/questions/30134479/vaadin-grid-vs-table), но я не думаю, что она предлагает лучшие варианты для этого, это Это будет почти то же самое. – Morfic