2015-10-13 62 views
2

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

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

例如,这是可能的较旧Table部件 - SO answer。但我广泛使用Grid,所以我想在这种情况下使用它。

回答

1

我发现了一个有趣的解决方案,但不幸的是不完美。

为了防止取消行,我们可以写一个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呼叫和网络传输。这是不利的。