public void InitCreateRootNodes()
 {
     if (ChildrenGetter != null)
     {
         IEnumerable     oList = ChildrenGetter(null);
         List <TreeNode> nodes = new List <TreeNode>();
         foreach (var o in oList)
         {
             TreeNode node = new TreeNode();
             ComplateNode(node, o);
             PostCreateNode(node);
             nodes.Add(node);
         }
         if (SortingMethod != null)
         {
             TreeSortEnum sortingMethod = SortingMethod(null);
             if (sortingMethod != TreeSortEnum.NONE)
             {
                 nodes.Sort(new TreeComparer(sortingMethod));
             }
         }
         foreach (var node in nodes)
         {
             Nodes.Add(node);
         }
     }
 }
        /// <summary>
        /// Load child nodes
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="levelStep">Used for expand until level</param>
        /// <param name="maxLevelStep">Used for expand until level</param>
        /// <param name="savedExpansionState">Used for expand saved state level</param>
        public void LoadBrahch(TreeNode parentNode, int levelStep, int maxLevelStep, IList <string> savedExpansionState)
        {
            levelStep++;
            if (parentNode.Nodes.Count > 0 &&
                parentNode.Nodes[0].Text == PSEVDO_NODE_TEXT)
            {
                parentNode.Nodes[0].Remove();
            }
            if (ChildrenGetter != null)
            {
                IEnumerable     oList = ChildrenGetter(parentNode);
                List <TreeNode> nodes = new List <TreeNode>();
                foreach (var o in oList)
                {
                    TreeNode node = new TreeNode();
                    if (ComplateNode != null)
                    {
                        ComplateNode(node, o);
                    }
                    PostCreateNode(node);
                    nodes.Add(node);
                }
                if (SortingMethod != null)
                {
                    TreeSortEnum sortingMethod = SortingMethod(parentNode);
                    if (sortingMethod != TreeSortEnum.NONE)
                    {
                        nodes.Sort(new TreeComparer(sortingMethod));
                    }
                }

                foreach (var node in nodes)
                {
                    parentNode.Nodes.Add(node);
                    if (savedExpansionState != null)
                    {
                        if (savedExpansionState.Contains(node.FullPath))
                        {
                            node.Expand();
                            LoadBrahch(node, levelStep, maxLevelStep, savedExpansionState);
                        }
                    }
                    else if (levelStep < maxLevelStep)
                    {
                        LoadBrahch(node, levelStep, maxLevelStep, savedExpansionState);
                    }
                }
            }
        }
 public TreeComparer(TreeSortEnum sort)
 {
     this.sort = sort;
 }