【问题标题】:Devexpress XtraList make child nodes parent nodes?Devexpress XtraList 使子节点成为父节点?
【发布时间】:2013-01-30 13:18:59
【问题描述】:

我有一个带有多个父节点的 XtraTreeList,每个父节点都附加了几个子节点。

我想从父节点中提取所有子节点,删除父节点,然后将所有这些子节点绑定为父节点。简而言之,我想删除父节点并将所有子节点设为父节点。

我尝试了几种方法,例如使用 TreeList.MoveNode(),但这对我不起作用。

编辑:

我已经删除了我之前的答案并添加了一个新的,效果很好。

【问题讨论】:

    标签: c# devexpress xtratreelist


    【解决方案1】:

    我所做的工作是我从代码中选择了所有节点,并调用了 DeleteSelectedNodes(),这是代码:

                List<int> nodeIdsToMove = new List<int>();
            List<int> nodeIdsToRemove = new List<int>();
    
            if (comboBox_GroupBy.SelectedItem.ToString() == "None")
            {
                /* Parent nodes */
                foreach(TreeListNode parentNode in treeList_Links.Nodes)
                {
                    nodeIdsToRemove.Add(parentNode.Id);
                    if (parentNode.HasChildren)
                    {
                        /* Child nodes */
                        foreach (TreeListNode childNode in parentNode.Nodes)
                            nodeIdsToMove.Add(childNode.Id);
                    }
                }
    
                MoveNodes(nodeIdsToMove);
                RemoveNode(nodeIdsToRemove);
    

    这里是 MoveNode 和 RemoveNode 的实现:

            private void MoveNodes(List<int> nodeIdsToMove)
        {
            foreach (int nodeId in nodeIdsToMove)
                treeList_Links.MoveNode(treeList_Links.FindNodeByID(nodeId), null);
        }
    

    private void RemoveNode(List nodeIdsToRemove) { /* 启用多选 */ treeList_Links.OptionsSelection.MultiSelect = true;

            /* Get nodes to select */
            ArrayList nodesToSelect = new ArrayList();
            foreach (int nodeId in nodeIdsToRemove)
                nodesToSelect.Add(treeList_Links.FindNodeByID(nodeId));
    
            /* Select nodes */
            treeList_Links.Selection.Set(nodesToSelect);
    
            /* Delete selected nodes */
            treeList_Links.DeleteSelectedNodes();
    
            /* Disable multiselect */
            treeList_Links.OptionsSelection.MultiSelect = false;
        }
    

    【讨论】: