TreeListNodesのコレクションがあります。これは、すべてのノードを別のツリーにコピーするために行っています。
foreach (TreeListNode tn in nodes)
trTree.Nodes.Add(tn);
上記のコードは機能しますが、ツリー内のノードの展開-折りたたみはこの後は機能しません。
あるXtraTreelistを別のXtraTreelistにコピーするにはどうすればよいですか?
TreeListNodesのコレクションがあります。これは、すべてのノードを別のツリーにコピーするために行っています。
foreach (TreeListNode tn in nodes)
trTree.Nodes.Add(tn);
上記のコードは機能しますが、ツリー内のノードの展開-折りたたみはこの後は機能しません。
あるXtraTreelistを別のXtraTreelistにコピーするにはどうすればよいですか?
この方法では機能しません。同じメモリ位置を持つツリー間でノードを共有しています。ツリー 1 のデータを変更すると、すぐにツリー 2 に影響することを考えてみてください。
次のメソッドでディープ コピーを実行することをお勧めします。TreeListNode
DeepClone
public static class CloneHelper
{
public static T DeepClone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T) formatter.Deserialize(ms);
}
}
}
次に、次を使用できます。
var cloneNodes = nodes.Select(node => CloneHelper.DeepClone<TreeListNode>(node))
.ToArray();
trTree.Nodes.AddRange(cloneNodes);
編集:
もちろんTreeListNode
、[Serializale] としてマークされていることを確認する必要があります。
別のアプローチとして、最初のツリーで使用されたデータを使用して 2 番目のツリーを再構築する必要があります。