Я нашел одно интересное решение, но, к сожалению, не совершенное.
Для предотвращения Deselect строки мы могли бы написать SelectionListener
и поставить там какая-то логика:
grid.setSelectionMode(Grid.SelectionMode.SINGLE);
grid.addSelectionListener(event -> {
Set<Object> selected = event.getSelected();
if (selected == null || selected.isEmpty()) {
Set<Object> removed = event.getRemoved();
removed.stream().filter(Objects::nonNull).forEach(someGrid::select);
}
});
Так предполагая, что режим одиночного выбора, если текущий выбор пуст, то предыдущий выбранный ряд должен быть выбран снова. Но если текущий выбор не пуст, это означает, что кто-то выбирает другую строку - это не требует никаких действий.
Это круто, но недостаточно - каждый клик (выбор) вызывает передачу и передачу по сети. Это недостаток.