Example #1
0
        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);
                }
            }
        }
Example #2
0
            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);
                        }
                    }
                }
            }
Example #3
0
            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);
                        }
                    }
                }
            }