【问题标题】: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;
}