【发布时间】:2012-09-25 15:37:29
【问题描述】:
我有一组 TreeListNodes。我这样做是为了将所有节点复制到另一棵树。
foreach (TreeListNode tn in nodes)
trTree.Nodes.Add(tn);
以上代码有效,但在此之后树中节点的展开-折叠将不起作用。
如何将一个 XtraTreelist 复制到另一个?
【问题讨论】:
标签: c# devexpress xtratreelist
我有一组 TreeListNodes。我这样做是为了将所有节点复制到另一棵树。
foreach (TreeListNode tn in nodes)
trTree.Nodes.Add(tn);
以上代码有效,但在此之后树中节点的展开-折叠将不起作用。
如何将一个 XtraTreelist 复制到另一个?
【问题讨论】:
标签: c# devexpress xtratreelist
它不会这样工作,您在具有相同内存位置的树之间共享节点。想一想,如果您更改树 1 上的数据,它会立即影响到树 2。
建议使用DeepClone 方法对TreeListNode 进行深拷贝:
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]
另一种方法,您需要使用第一棵树中使用的数据重新构建第二棵树
【讨论】: