你好,
我有一个复选框,一个表和表有 10 行。如果用户选中该复选框,那么 vaadin 表中的所有 10 行都应该需要选择,但我不知道如何实现此功能。谁能告诉我如何做到这一点?如果可能的话,请给我一些代码片段。
你好,
我有一个复选框,一个表和表有 10 行。如果用户选中该复选框,那么 vaadin 表中的所有 10 行都应该需要选择,但我不知道如何实现此功能。谁能告诉我如何做到这一点?如果可能的话,请给我一些代码片段。
Table.getValue()
获取单个项目的 ID 或多个项目 ID 的集合,并Table.getItemIds()
返回表中所有项目的 ID。这意味着您可以通过以下方式选择表中的所有项目:
yourTable.setValue(yourTable.getItemIds());
请注意,如果表的容器中有很多项目,这将导致性能问题。不过,应该在像你这样的简单案例中工作。
确保该表具有 yourTable.setMultiSelect(true) ,然后仅迭代从 yourTable.getItemIds() 获得的 ID 并为所有 id 调用 yourTable.select(id) 。这是一种方式。
在 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);
你可以简单地做到这一点
Table table = new Table();
table.setValue(table.getItemIds());
它不应该导致性能问题,而是你有几百行。如果你有 - 糟糕的架构。
您也可以只遍历列表(Vaadin 也这样做) 在这里您可以找到如何使用简单的迭代来反转选定的列表。用两句话来说:
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);