【问题标题】:Copy XtraTreeList to another treelist将 XtraTreeList 复制到另一个树列表
【发布时间】:2012-09-25 15:37:29
【问题描述】:

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

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

以上代码有效,但在此之后树中节点的展开-折叠将不起作用。

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

【问题讨论】:

    标签: c# devexpress xtratreelist


    【解决方案1】:

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

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

    【讨论】:

    • 尝试了您的方法,但我收到此错误:在程序集“DevExpress.XtraTreeList.v11.1,版本=11.1.8.0,文化=中性”中键入“DevExpress.XtraTreeList.Nodes.TreeListNode”, PublicKeyToken=b88d1754d700e49a' 未标记为可序列化
    • @buffer_overflow:那么,你需要重新构建树2,或者复制树1中节点的每个属性
    猜你喜欢
    • 2017-11-02
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多