0

我有一个带有复选框外观的可选树。我需要在选择特定 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]);
            }
        }
    }
});
4

3 回答 3

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

必须使用RecordListand 先找到所需的记录才能使用ListGrid.selectRecord()方法。
使用SelectionAppearance.CHECKBOXandSelectionChangedHandler可能会很棘手,因为程序化选择将触发进一步的选择事件。

这是基于具有以下更改的复选框树示例。

// employeeTreeGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
// employeeTreeGrid.setShowSelectedStyle(false);
employeeTreeGrid.setShowPartialSelection(false);
// employeeTreeGrid.setCascadeSelection(true);
employeeTreeGrid.setSelectionType(SelectionStyle.SIMPLE);
于 2013-08-15T11:22:28.817 回答
0

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

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

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

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

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

最后 2 个方法有多个重载方法,允许您根据TreeNode(s)自身或TreeNode(s).

于 2013-08-01T08:46:08.483 回答
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();
                }
            }

        }
    });
于 2015-12-18T10:07:46.210 回答