将XtraTreeList复制到另一个treelist

时间:2012-09-25 15:37:29

标签: c# devexpress xtratreelist

我有一个TreeListNodes的集合。我这样做是为了将所有节点复制到另一棵树。

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

上面的代码有效,但在此之后,树中节点的展开 - 折叠将无效。

如何将一个XtraTreelist复制到另一个?

1 个答案:

答案 0 :(得分:1)

它不会以这种方式工作,您在具有相同内存位置的树之间共享节点。考虑一下如果更改树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]

另一种方法是,您需要使用第一个树中使用的数据重新构建第二个树