0
我有一个TreeListNodes的集合。我这样做是为了将所有节点复制到另一个树。将XtraTreeList复制到另一个treelist
foreach (TreeListNode tn in nodes)
trTree.Nodes.Add(tn);
上面的代码工作,但在这之后,树中节点的展开 - 折叠将不起作用。
如何将一个XtraTreelist复制到另一个?
我有一个TreeListNodes的集合。我这样做是为了将所有节点复制到另一个树。将XtraTreeList复制到另一个treelist
foreach (TreeListNode tn in nodes)
trTree.Nodes.Add(tn);
上面的代码工作,但在这之后,树中节点的展开 - 折叠将不起作用。
如何将一个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]
另一种方法,你需要重新建立与第一树中使用的数据
试过你的方法了第二棵树,但我正在逐渐这个错误:在Assembly'DevExpress.XtraTreeList.v11.1,Version = 11.1.8.0,Culture = neutral,PublicKeyToken = b88d1754d700e49a'中没有标记为可串行化的类型'DevExpress.XtraTreeList.Nodes.TreeListNode' – Cannon
@buffer_overflow:情况下,您需要重新构建树2,或复制树1中节点的每个属性 –