0

我有一个 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 的新手。有任何想法吗?

4

1 回答 1

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();
        }

    });   
于 2013-02-08T16:27:04.207 回答