0

TreeListNodesのコレクションがあります。これは、すべてのノードを別のツリーにコピーするために行っています。

foreach (TreeListNode tn in nodes)
                trTree.Nodes.Add(tn);

上記のコードは機能しますが、ツリー内のノードの展開-折りたたみはこの後は機能しません。

あるXtraTreelistを別のXtraTreelistにコピーするにはどうすればよいですか?

4

1 に答える 1

1

この方法では機能しません。同じメモリ位置を持つツリー間でノードを共有しています。ツリー 1 のデータを変更すると、すぐにツリー 2 に影響することを考えてみてください。

次のメソッドでディープ コピーを実行することをお勧めします。TreeListNodeDeepClone

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 番目のツリーを再構築する必要があります。

于 2012-09-25T15:46:32.910 に答える