Example #1
0
 /// <summary>
 /// 先让树完整加载,然后再把树中的节点全部加入到指定的列表中。
 /// </summary>
 /// <param name="tree"></param>
 /// <param name="nodes"></param>
 internal static void FullAddIntoList(ITreeComponent tree, IList<Entity> nodes)
 {
     tree.LoadAllNodes();
     tree.EachNode(e =>
     {
         nodes.Add(e);
         return false;
     });
 }
Example #2
0
 /// <summary>
 /// 先让树完整加载,然后再把树中的节点全部加入到指定的列表中。
 /// </summary>
 /// <param name="tree"></param>
 /// <param name="nodes"></param>
 internal static void FullAddIntoList(ITreeComponent tree, IList <Entity> nodes)
 {
     tree.LoadAllNodes();
     tree.EachNode(e =>
     {
         nodes.Add(e);
         return(false);
     });
 }
Example #3
0
 internal static int CountNodes(ITreeComponent component)
 {
     int count = 0;
     component.EachNode(e =>
     {
         count++;
         return false;
     });
     return count;
 }
Example #4
0
        internal static int CountNodes(ITreeComponent component)
        {
            int count = 0;

            component.EachNode(e =>
            {
                count++;
                return(false);
            });
            return(count);
        }
Example #5
0
        /// <summary>
        /// 树形EntityList转化为全部节点集合
        /// </summary>
        /// <param name="tree"></param>
        /// <returns></returns>
        public static List <T> ConvertToList <T>(ITreeComponent tree) where T : Entity
        {
            List <T> list = new List <T>();

            tree.EachNode(e =>
            {
                list.Add((T)e);
                return(false);
            });
            return(list);
        }
Example #6
0
        /// <summary>
        /// 删除整棵树中所有需要删除的节点。
        /// </summary>
        /// <param name="tree">The tree.</param>
        /// <param name="markSaved">if set to <c>true</c> [mark saved].</param>
        private void SubmitTreeDeletedItems(ITreeComponent tree, bool markSaved)
        {
            //整合所有要删除的节点。
            var mergedDeletedList = new List <Entity>();

            #region 加入列表的待删除节点。

            var list = tree as EntityList;
            if (list != null)
            {
                var toDeletedList = list.DeletedListField;
                if (toDeletedList != null)
                {
                    var isTreeRootList = list.IsTreeRootList;
                    for (int i = 0, c = toDeletedList.Count; i < c; i++)
                    {
                        var child = toDeletedList[i];
                        //如果在删除之后,又变换了 TreePId,那么可能是该节点已经加入到别的子树中,
                        //却无法修改根列表的 DeletedList 而导致该节点还在其中。
                        //所以需要把这些节点过滤掉,根列表只处理根节点的删除。
                        if (!isTreeRootList || child.TreePId == null)
                        {
                            //由于自关联外键没有级联删除,所以节点必须完整加载后,再全部加入到列表中。
                            TreeHelper.FullAddIntoList(child, mergedDeletedList);
                        }
                    }
                }
            }

            #endregion

            #region 加入所有节点的待删除列表节点。

            tree.EachNode(node =>
            {
                var tc = node.TreeChildrenField;
                if (tc != null)
                {
                    var tcDeleted = tc.DeletedListField;
                    if (tcDeleted != null)
                    {
                        for (int i = 0, c = tcDeleted.Count; i < c; i++)
                        {
                            var deleted = tcDeleted[i];
                            //与列表一样,必须检测删除的节点,当前是不是还属于 node。
                            if (node.Id.Equals(deleted.TreePId))
                            {
                                TreeHelper.FullAddIntoList(deleted, mergedDeletedList);
                            }
                        }
                    }
                }
                return(false);
            });

            #endregion

            //反转顺序后再保存。
            mergedDeletedList.Reverse();
            for (int i = 0, c = mergedDeletedList.Count; i < c; i++)
            {
                var item = mergedDeletedList[i];
                item.PersistenceStatus = PersistenceStatus.Deleted;
                this.SubmitItem(item, false, false);
            }

            if (markSaved)
            {
                tree.MarkSaved();
            }
        }
Example #7
0
        private static void TestTreeComponent(ITreeComponent component, int countBefore, int countAfter)
        {
            //只查询一级节点,统计该节点的个数应该正确。同时,它的 IsFullLoaded 返回假。
            //此时,调用 EachNode 遍历出的个数,应该正确。
            //调用 LoadAllNodes 查询整个树后,统计该节点的个数应该正确。
            //此时,调用 EachNode 遍历出的个数,应该正确。

            Assert.IsTrue(component.CountNodes() == countBefore, "只查询一级节点,统计该节点的个数应该正确。");
            Assert.IsTrue(!component.IsFullLoaded, "同时,它的 IsFullLoaded 返回假。");
            int count = 0;
            component.EachNode(e =>
            {
                count++;
                return false;
            });
            Assert.IsTrue(count == countBefore, "此时,调用 EachNode 遍历出的个数,应该正确。");

            component.LoadAllNodes();
            Assert.IsTrue(component.CountNodes() == countAfter, "调用 LoadAllNodes 查询整个树后,统计该节点的个数应该正确。");
            count = 0;
            component.EachNode(e =>
            {
                count++;
                return false;
            });
            Assert.IsTrue(count == countAfter, "此时,调用 EachNode 遍历出的个数,应该正确。");
        }
Example #8
0
        /// <summary>
        /// 删除整棵树中所有需要删除的节点。
        /// </summary>
        /// <param name="tree">The tree.</param>
        /// <param name="markSaved">if set to <c>true</c> [mark saved].</param>
        private void SubmitTreeDeletedItems(ITreeComponent tree, bool markSaved)
        {
            //整合所有要删除的节点。
            var mergedDeletedList = new List<Entity>();

            #region 加入列表的待删除节点。

            var list = tree as EntityList;
            if (list != null)
            {
                var toDeletedList = list.DeletedListField;
                if (toDeletedList != null)
                {
                    var isTreeRootList = list.IsTreeRootList;
                    for (int i = 0, c = toDeletedList.Count; i < c; i++)
                    {
                        var child = toDeletedList[i];
                        //如果在删除之后,又变换了 TreePId,那么可能是该节点已经加入到别的子树中,
                        //却无法修改根列表的 DeletedList 而导致该节点还在其中。
                        //所以需要把这些节点过滤掉,根列表只处理根节点的删除。
                        if (!isTreeRootList || child.TreePId == null)
                        {
                            //由于自关联外键没有级联删除,所以节点必须完整加载后,再全部加入到列表中。
                            TreeHelper.FullAddIntoList(child, mergedDeletedList);
                        }
                    }
                }
            }

            #endregion

            #region 加入所有节点的待删除列表节点。

            tree.EachNode(node =>
            {
                var tc = node.TreeChildrenField;
                if (tc != null)
                {
                    var tcDeleted = tc.DeletedListField;
                    if (tcDeleted != null)
                    {
                        for (int i = 0, c = tcDeleted.Count; i < c; i++)
                        {
                            var deleted = tcDeleted[i];
                            //与列表一样,必须检测删除的节点,当前是不是还属于 node。
                            if (node.Id.Equals(deleted.TreePId))
                            {
                                TreeHelper.FullAddIntoList(deleted, mergedDeletedList);
                            }
                        }
                    }
                }
                return false;
            });

            #endregion

            //反转顺序后再保存。
            mergedDeletedList.Reverse();
            for (int i = 0, c = mergedDeletedList.Count; i < c; i++)
            {
                var item = mergedDeletedList[i];
                item.PersistenceStatus = PersistenceStatus.Deleted;
                this.SubmitItem(item, false, false);
            }

            if (markSaved)
            {
                tree.MarkSaved();
            }
        }