使用ZK删除所有选定的表行

时间:2013-02-08 14:50:38

标签: java zk

我有一个ZK网格,我在每行上生成随机数。每行由一个复选框和数字本身组成。

我想要一个按钮,删除带有选中复选框的所有行。这是“删除”按钮的事件处理程序:

deleteButton.addEventListener(Events.ON_CLICK,
            new EventListener() {

        public void onEvent(Event evt) {
                Iterator<Component> selected = randomTable.queryAll("row checkbox").iterator();
                System.out.println("Deleted: ");
                while (selected.hasNext()) {
                    Checkbox c = (Checkbox) selected.next();
                    if (c.isChecked()) {
                        System.out.print(c.getId()); 
                        System.out.println(" from row " + c.getParent().getId());
                        c.getParent().detach(); // detach the checked row
                    }
                }
            }
        });   

但它只会删除第一个选中的行,即使它找到所有其他已检查的行。

我还是ZK的新手。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我想出了一个解决方法。事实证明,如果我使用中间列表来存储我想要删除的行,detach()适用于所有这些行。

无论如何,请随意分享任何关于它为什么不起作用的提示。任何贡献都是+1。

这是更新后的代码:

deleteButton.addEventListener(Events.ON_CLICK,
            new EventListener() {
        public void onEvent(Event evt) {
            List<Component> toRemove = new Vector<Component>();
            Iterator<Component> selected = randomTable.queryAll("row checkbox").iterator();
            System.out.println("Deleted: ");
            while (selected.hasNext()) {
                Checkbox c = (Checkbox) selected.next();
                if (c.isChecked()) {
                    System.out.print(c.getId()); 
                    System.out.println(" from row " + c.getParent().getId());
                    toRemove.add(c.getParent());
                }
            }
            for (Component c : toRemove)
                c.detach();
        }

    });