如何选择vaadin表中的所有行?

时间:2010-03-30 11:55:52

标签: vaadin

HI,

我有一个复选框,一个表和一个表有10行。如果用户选中复选框,则vaadin表中的所有10行都需要选择,但我不知道如何实现此功能。可以有谁告诉我如何实现这一目标?如果可能,请提供一些代码段。

4 个答案:

答案 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);