예제 #1
0
        static TreeIndexOption()
        {
            //最大可以到 999.
            var numbers = new string[999];

            for (int i = 1; i <= 999; i++)
            {
                numbers[i - 1] = i.ToString("d3");
            }

            var value = new TreeIndexOption
            {
                Seperator = '.',
                Layers    = new string[][] { numbers }
            };

            //public static readonly TreeIndexOption Default = new TreeIndexOption
            //{
            //    Seperator = '.',
            //    Layers = new string[][] {
            //        new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9" }
            //    }
            //};
            Default = value;
        }
예제 #2
0
파일: TreeHelper.cs 프로젝트: hardCTE/Rafy
        /// <summary>
        /// 以树节点加载算法加载数据。
        /// </summary>
        /// <param name="list">The list.</param>
        /// <param name="nodes">The nodes.</param>
        /// <param name="indexOption">The index option.</param>
        internal static void LoadTreeData(IList<Entity> list, IEnumerable nodes, TreeIndexOption indexOption)
        {
            /*********************** 代码块解释 *********************************
             * 树节点加载算法:
             * 由于树节点在查询时已经通过 TreeIndex 来排序了,本质上是一种树的深度遍历序。
             * 所以我们只需要记录最后一次添加的节点,然后通过它尝试找到与要添加的节点的父节点,
             * 如果没有找到,则直接把要添加的节点添加到列表中。
             * 这样,就以一种顺序的方式完成了整个节点的加载。
            **********************************************************************/

            //最后一次添加的节点。
            Entity lastNode = null;
            foreach (Entity entity in nodes)
            {
                var treePId = entity.TreePId;
                if (treePId == null)
                {
                    var added = TryAddToList(list, entity, indexOption);
                    if (added) lastNode = entity;
                }
                else
                {
                    //尝试通过最后一次添加的节点来找到与 entity 关联的父节点。
                    var parentNode = lastNode;
                    while (parentNode != null && !treePId.Equals(parentNode.Id))
                    {
                        parentNode = parentNode.TreeParentData;
                    }

                    //如果没有找到 parentNode,则加入到列表中。否则,加入到 parentNode 下。
                    if (parentNode == null)
                    {
                        var added = TryAddToList(list, entity, indexOption);
                        if (added) lastNode = entity;
                    }
                    else
                    {
                        parentNode.TreeChildren.LoadAdd(entity);
                        lastNode = entity;
                    }
                }
            }
        }
예제 #3
0
        static TreeIndexOption()
        {
            //最大可以到 999.
            var numbers = new string[999];
            for (int i = 1; i <= 999; i++)
            {
                numbers[i - 1] = i.ToString("d3");
            }

            var value = new TreeIndexOption
            {
                Seperator = '.',
                Layers = new string[][] { numbers }
            };

            //public static readonly TreeIndexOption Default = new TreeIndexOption
            //{
            //    Seperator = '.',
            //    Layers = new string[][] {
            //        new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9" }
            //    }
            //};
            Default = value;
        }
예제 #4
0
파일: TreeHelper.cs 프로젝트: hardCTE/Rafy
        /// <summary>
        /// 必须要同一级的节点才能加入到实体列表中。
        /// Test:TET_Query_LoadSubTreeIgnoreOtherNodes
        /// </summary>
        /// <param name="list"></param>
        /// <param name="node"></param>
        /// <param name="indexOption"></param>
        private static bool TryAddToList(IList<Entity> list, Entity node, TreeIndexOption indexOption)
        {
            if (list.Count > 0)
            {
                var listLevel = indexOption.CountLevel(list[0].TreeIndex);
                var nodeLevel = indexOption.CountLevel(node.TreeIndex);
                if (listLevel == nodeLevel)
                {
                    list.Add(node);
                    return true;
                }
            }
            else
            {
                list.Add(node);
                return true;
            }

            return false;
        }