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 に答える