我有一个带有多个父节点的 XtraTreeList,每个父节点都附加了几个子节点。
我想从父节点中提取所有子节点,删除父节点,然后将所有这些子节点绑定为父节点。简而言之,我想删除父节点并将所有子节点设为父节点。
我尝试了几种方法,例如使用 TreeList.MoveNode() 但这对我不起作用。
编辑:
我已经删除了我之前的答案并添加了新的答案,效果很好。
我有一个带有多个父节点的 XtraTreeList,每个父节点都附加了几个子节点。
我想从父节点中提取所有子节点,删除父节点,然后将所有这些子节点绑定为父节点。简而言之,我想删除父节点并将所有子节点设为父节点。
我尝试了几种方法,例如使用 TreeList.MoveNode() 但这对我不起作用。
编辑:
我已经删除了我之前的答案并添加了新的答案,效果很好。
我所做的工作是我从代码中选择了所有节点,并调用了 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;
}