2

如何Grid在 Vaadin 7 中禁用取消选择行,但有权使用键盘或鼠标单击选择另一行?

Grid grid = new Grid(container);
grid.setSelectionMode(Grid.SelectionMode.SINGLE);

例如,这对于较旧的Table组件是可能的 - SO 答案。但我广泛使用Grid,所以我也想在这种情况下使用它。

4

2 回答 2

2

我找到了一个有趣的解决方案,但不幸的是并不完美。

为了防止取消选择行,我们可以编写一个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 调用和网络传输。这是劣势。

于 2015-10-13T12:31:34.427 回答
2

在 Vaadin 8 中,您可以使用:

grid.setSelectionMode(SINGLE);
((SingleSelectionModel) grid.getSelectionModel()).setDeselectAllowed(false);
于 2018-03-29T10:34:13.227 回答