複数の親ノードを持つ 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;
}