private void OnTreeItemCloned(Entity source, CloneOptions options) { if (options.HasAction(CloneActions.ParentRefEntity)) { this.TreeParentData = source._treeParent; } if (options.HasAction(CloneActions.GrabChildren)) { _treeChildren = source._treeChildren; if (_treeChildren != null) { for (int i = 0, c = _treeChildren.Count; i < c; i++) { var child = _treeChildren[i]; child._treeParent = this; } } } else if (options.HasAction(CloneActions.ChildrenRecur)) { if (source._treeChildren == null) { _treeChildren = null; } else { this.TreeChildren.Clone(source._treeChildren, options); } } }
internal void Clone(EntityTreeChildren source, CloneOptions options) { _loaded = source._loaded; if (_loaded) { var srcNodes = source._nodes; if (srcNodes != null) { _nodes = new List <Entity>(); var repo = _owner.FindRepository(); var entityType = _owner.GetType(); for (int i = 0, c = srcNodes.Count; i < c; i++) { var src = srcNodes[i]; Entity entity = null; if (repo != null) { entity = repo.New(); } else { entity = Entity.New(entityType); } entity.Clone(src, options); entity._treeParent = _owner; _nodes.Add(entity); } } } }
internal void Clone(EntityTreeChildren source, CloneOptions options) { _loaded = source._loaded; if (_loaded) { var srcNodes = source._nodes; if (srcNodes != null) { _nodes = new List <Entity>(); var repo = _owner.FindRepository(); var entityType = _owner.GetType(); for (int i = 0, c = srcNodes.Count; i < c; i++) { var src = srcNodes[i]; Entity entity = null; if (repo != null) { entity = repo.New(); } else { entity = Entity.New(entityType); } /*修复Entitylist使用TreeChildren属性Clone时TreeIndex错误问题 *原因是TreeChildren中实体Clone时会TreePId改变触发OnTreePIdChanged事件, * OnTreePIdChanged事件中会处理entity._treeParent为空并且 * _treeParent.Id不等于新的克隆值时,需要重新设置TreeParent值 * 导致设置TreeIndex错误 * 所以需要entity克隆前设置_treeParent的值为 source._owner */ entity._treeParent = source._owner; entity.Clone(src, options); entity._treeParent = _owner; _nodes.Add(entity); } } } }