2012-09-25 24 views
0

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

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

上面的代码工作,但在这之后,树中节点的展开 - 折叠将不起作用。

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

回答

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]

另一种方法,你需要重新建立与第一树中使用的数据

+0

试过你的方法了第二棵树,但我正在逐渐这个错误:在Assembly'DevExpress.XtraTreeList.v11.1,Version = 11.1.8.0,Culture = neutral,PublicKeyToken = b88d1754d700e49a'中没有标记为可串行化的类型'DevExpress.XtraTreeList.Nodes.TreeListNode' – Cannon

+0

@buffer_overflow:情况下,您需要重新构建树2,或复制树1中节点的每个属性 –