HI,
我有一个复选框,一个表和一个表有10行。如果用户选中复选框,则vaadin表中的所有10行都需要选择,但我不知道如何实现此功能。可以有谁告诉我如何实现这一目标?如果可能,请提供一些代码段。
答案 0 :(得分:10)
Table.getValue()
获取单个项目的ID或多个项目ID的集合,Table.getItemIds()
返回表格中所有项目的ID。这意味着您可以通过以下方式选择表格中的所有项目:
yourTable.setValue(yourTable.getItemIds());
请注意,如果表的容器中有很多项目,这将导致性能问题。但是,应该像你这样的简单案例工作。
答案 1 :(得分:1)
确保该表具有yourTable.setMultiSelect(true),然后只需从yourTable.getItemIds()迭代ID,并为所有id调用yourTable.select(id)。 这是一种方式。
答案 2 :(得分:1)
在Vaadin 7中,当您拥有包含容器数据源的表时,您可以执行以下操作:
table.setValue(container.getItemIds());
在Vaadin 6中为我工作:
public void selectAll() {
int size = table.getItemIds().size();
for(int i = 0; i < size; i++) {
table.select(i);
}
table.requestRepaint();
}
当然,在两个Vaadin版本中都不要忘记这些内容:
table.setSelectable(true);
table.setMultiSelect(true);
答案 3 :(得分:0)
你可以通过
完成Table table = new Table();
table.setValue(table.getItemIds());
它不应该导致性能问题而是你有几百行。如果你有 - 糟糕的架构。
你也可以遍历列表(Vaadin做同样的事情) Here您可以找到如何使用简单迭代反转所选列表。 用两个词来说:
Collection<Object> toSelect = new ArrayList<Object>(); for (Iterator<?> it = simpleTable.getItemIds().iterator(); it.hasNext(); ) { Object next = it.next(); if (!((Collection<?>) simpleTable.getValue()).contains(next)) toSelect.add(next); } simpleTable.setValue(toSelect);