4

你好,

我有一个复选框,一个表和表有 10 行。如果用户选中该复选框,那么 vaadin 表中的所有 10 行都应该需要选择,但我不知道如何实现此功能。谁能告诉我如何做到这一点?如果可能的话,请给我一些代码片段。

4

4 回答 4

10

Table.getValue()获取单个项目的 ID 或多个项目 ID 的集合,并Table.getItemIds()返回表中所有项目的 ID。这意味着您可以通过以下方式选择表中的所有项目:

yourTable.setValue(yourTable.getItemIds());

请注意,如果表的容器中有很多项目,这将导致性能问题。不过,应该在像你这样的简单案例中工作。

于 2010-04-02T20:41:57.973 回答
1

确保该表具有 yourTable.setMultiSelect(true) ,然后仅迭代从 yourTable.getItemIds() 获得的 ID 并为所有 id 调用 yourTable.select(id) 。这是一种方式。

于 2010-04-01T07:39:13.947 回答
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);
于 2014-07-07T08:22:49.087 回答
0

你可以简单地做到这一点

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);
于 2013-12-03T21:24:45.943 回答