public void Dispose() { if (children != null) { children.ForEach(ch => ch.Dispose()); children = null; } Parent = null; }
public Stack GetParents() { var stack = new Stack(); FreeHierarchyTypeTreeItem item = this; while (item != null) { stack.Push(item); item = item.Parent; } return(stack); }
public static Dictionary <int, FreeHierarchyTypeTreeItem> GetTypes(EnumModuleFilter?rightFilter) { #if DEBUG var sw = new System.Diagnostics.Stopwatch(); sw.Start(); #endif //var dbTypes = FreeHierarchyService.GetTypes(Manager.UserName, Manager.Password, rights.ToList()); var freeHierarchyTypes = Manager.User.GetFreeHierarchyTypes(Manager.UI.ShowMessage); #if DEBUG sw.Stop(); Console.WriteLine("GetFreeHierarchyTypes {0} млс", sw.ElapsedMilliseconds); sw.Restart(); #endif var result = new Dictionary <int, FreeHierarchyTypeTreeItem>(); if (freeHierarchyTypes == null || freeHierarchyTypes.Count == 0) { return(result); } var parents = new Dictionary <FreeHierarchyTypeTreeItem, int?>(); IEnumerable <TFreeHierarchyType> types = rightFilter.GetValueOrDefault() != EnumModuleFilter.None ? freeHierarchyTypes.Where( f => f.ModuleFilter.GetValueOrDefault() == EnumModuleFilter.None || (rightFilter.GetValueOrDefault() & f.ModuleFilter.GetValueOrDefault()) != EnumModuleFilter.None) : freeHierarchyTypes; foreach (var value in types) { var newItem = new FreeHierarchyTypeTreeItem { FreeHierTree_ID = value.FreeHierTree_ID, StringName = value.StringName, ModuleFilter = value.ModuleFilter //так как читается упорядочено по уровням }; result.Add(newItem.FreeHierTree_ID, newItem); parents[newItem] = value.ParentID; } if (parents.Count == 0) { return(result); } foreach (var value in result.Values) { int?parentId; FreeHierarchyTypeTreeItem hierarchyTypeTreeItem; if (!parents.TryGetValue(value, out parentId) || !parentId.HasValue || !result.TryGetValue(parentId.Value, out hierarchyTypeTreeItem)) { continue; } value.Parent = hierarchyTypeTreeItem; value.Parent.Children.Add(value); } #if DEBUG sw.Stop(); Console.WriteLine("Построение типов дерева {0} млс", sw.ElapsedMilliseconds); #endif //Сортируем по алфавиту только в стандартном дереве FreeHierarchyTypeTreeItem standartTree; if (result.TryGetValue(TreeTypeStandart, out standartTree) && standartTree != null && standartTree.Children != null && standartTree.Children.Count > 0) { standartTree.Children.Sort(new FreeHierarchyTypeTreeItemComparer()); } return(result); }