如何禁用在vadin 7中取消选择Grid
行,但允许使用键盘或鼠标单击选择另一行?
Grid grid = new Grid(container);
grid.setSelectionMode(Grid.SelectionMode.SINGLE);
例如,对于较旧的Table
组件- SO答案,这是可能的。但是我广泛使用Grid
所以我也想在这个例子中使用它
我找到了一个有趣的解决方案,但不幸的是并不完美。
为了防止取消选择行,我们可以写一个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);
}
});
因此假设单选择模式,如果当前选择为空,则应该再次选择之前选择的行。但如果当前选择不是空的,这意味着有人选择了另一行-这不需要任何操作。
这很酷,但还不够-每次点击(选择)都会引起http调用和网络传输。这是劣势。
在vadin 8中可以使用:
grid.setSelectionMode(SINGLE);
((SingleSelectionModel) grid.getSelectionModel()).setDeselectAllowed(false);