Devexpress XtraList сделать дочерние узлы родительскими узлами?
У меня есть XtraTreeList с несколькими родительскими узлами, к каждому родительскому узлу добавлено несколько дочерних узлов.
Что я хочу, чтобы извлечь все дочерние узлы из своих родителей, удалить родительские узлы, а затем связать все эти дочерние узлы как родительские. Короче говоря, я хочу удалить родительские узлы и сделать все дочерние узлы родительскими узлами.
Я пробовал несколько способов, таких как использование TreeList.MoveNode(), но это не сработало для меня.
Редактировать:
Я удалил свой предыдущий ответ и добавил новый, который отлично работает.
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) {/ * Enalbe multiselect * / 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;
}