动态选择Smart GWT中兄弟姐妹treenode的复选框

时间:2013-07-31 21:12:28

标签: gwt smartgwt

我有一个带复选框外观的可选树。我需要在选择特定的TreeNode时选择所有兄弟TreeNode。

我可以获取所有兄弟树节点,但我不知道TreeNode的属性名是什么来选中该复选框。

任何人都可以帮助我选择那些节点。


compareGrid.addSelectionChangedHandler(new SelectionChangedHandler() {

    @Override
    public void onSelectionChanged(SelectionEvent event) {
        TreeNode node =  (TreeNode) event.getSelectedRecord();
        TreeNode parent = tree.getParent(node);//tree is Tree object

        treeGrid.selectRecord(parent);
        TreeNode[] nodes = tree.getAllNodes(parent);
        for(int i=0; i< nodes.length; i++){
            if(!nodes[i].getAttributeAsBoolean("isSelected"))
                treeGrid.selectRecord(nodes[i]);
            }
        }
    }
});

3 个答案:

答案 0 :(得分:0)

您可以使用以下任何一项:

treeGrid.selectAllRecords();
treeGrid.selectRecord(record);
treeGrid.selectRecords(records);

第一种方法将选择树的所有TreeNodes

第二个将只选择一个指定的TreeNodes树。

第三个将选择树的多个指定TreeNodes

最后两种方法有多种重载方法,允许您根据TreeNode(s)本身或TreeNode(s)的索引指定节点。

答案 1 :(得分:0)

这是一个非常接近(没有复选框)的解决方案。

employeeTreeGrid.addNodeClickHandler(new NodeClickHandler() {
    public void onNodeClick(NodeClickEvent event) {

        if (event.getNode() != null) {
            TreeNode node = event.getNode();
            TreeNode parent = employeeTree.getParent(node);

            if (employeeTreeGrid.isSelected(node)) {
                List<TreeNode> nodesToSelect = new ArrayList<TreeNode>();

                // omit parent (root) if on first level
                if (!"1".equals(node.getAttribute("ReportsTo"))) {
                    nodesToSelect.add(parent);
                }

                TreeNode[] siblings = employeeTree.getChildren(parent);
                nodesToSelect.addAll(Arrays.asList(siblings));

                RecordList recordList = employeeTreeGrid.getOriginalRecordList();

                for (TreeNode treeNode : nodesToSelect) {
                    Record record = recordList.find("EmployeeId", treeNode.getAttribute("EmployeeId"));
                    if (record != null) {
                        employeeTreeGrid.selectRecord(record);
                    }
                }
            }
        }
    }
});

必须使用RecordList并首先查找所需的记录才能使用ListGrid.selectRecord()方法 使用SelectionAppearance.CHECKBOXSelectionChangedHandler可能会非常棘手,因为程序化选择会触发进一步的选择事件。

这基于Checkbox tree sample,但有以下变化。

// employeeTreeGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
// employeeTreeGrid.setShowSelectedStyle(false);
employeeTreeGrid.setShowPartialSelection(false);
// employeeTreeGrid.setCascadeSelection(true);
employeeTreeGrid.setSelectionType(SelectionStyle.SIMPLE);

答案 2 :(得分:0)

要从智能gwt中的树网格中获取所选复选框的值,我有以下解决方案ListGridRecord [] arrRec = event.getSelection();示例代码如下。

employeeTreeGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
employeeTreeGrid.setSelectionType(SelectionStyle.SIMPLE);
employeeTreeGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
        @Override
        public void onSelectionChanged(SelectionEvent event) 
            //selectedCounties  Set to add selected checkbox or deslected checkbox names/title
            if (selectedCounties == null || selectedCounties.size() == 0)
                selectedCounties = new TreeSet<String>();
            selectedCounties.clear();

            ListGridRecord[] arrRec = event.getSelection();
            for (ListGridRecord listGridRecord : arrRec) {
                selectedCounties.add(listGridRecord.getAttribute("Name"));
            }
            // You can do iteration over it if needed

            selectedCounties.remove("All Counties");
            Iterator<String> it = selectedCounties.iterator();
            while (it.hasNext()) {
                if (it.next().contains("Zone")) {
                    it.remove();
                }
            }

        }
    });