/// <summary> /// Переводит элементы иерархии memberInfoHierarchy, перечисленные в SelectionInfo и находящиеся там в состоянии stateInDictionary, в состояние newState /// </summary> /// <param name="memberInfoHierarchy">Иерархия элементов</param> /// <param name="SelectionInfo">Коллекция элементов, которые моут быть переведены</param> /// <param name="stateInDictionary">Состояние в коллекции, которое подлежит переводу в новое</param> /// <param name="newState">Новое состояние элементов</param> private void SetMembersInfoToNewState(RootOlapMemberInfo memberInfoHierarchy, List<MemberChoiceSettings> selectionInfo, SelectStates stateInDictionary, SelectStates newState) { if (selectionInfo != null) { foreach (MemberChoiceSettings si in selectionInfo) { if (!String.IsNullOrEmpty(si.UniqueName) && si.SelectState == stateInDictionary) { OlapMemberInfo memberInfo = memberInfoHierarchy.FindMember(si.UniqueName); //Если элемент найден, то переводим в новое состояние if (memberInfo != null) { memberInfo.SetNewState(newState); } } } } }
/// <summary> /// Формирует OlapMemberInfoCollection для указанного Set с учетом иерархии /// </summary> /// <param name="Set">Set</param> private RootOlapMemberInfo BuildHierarсhyBySelection() { //Задача: //Получить элементы, входящие в Set и сформировать иерархию с учетом родителей //Например: База - FoodMart 2000, Куб - Sales, Измерение - [Customers] // Set: {[Customers].[Mexico].Children, [Customers].[USA].Children} - все штаты Мексики и США // Сформированная иерархия должна включать в себя: // All Customers // Mexico // <штаты Мексики> // США // <штаты США> // // //Алгоритм решения: //1. Выполняем запрос, который ворзвращает всех предков элементов Set, не попавших в сам Set //2. Строим иерархию предков, не попавших в Set (результат из п.1) //3. Выполняем запрос, который ворзвращает элементы Set //4. Добавляем в иерархию элементы Set и у станавливаем их в нужное состояние // RootOlapMemberInfo memberInfoHierarchy = new RootOlapMemberInfo(MemberData.Empty); memberInfoHierarchy.HierarchyStateChanged += new OlapMemberInfo.StateChangedEventHandler(OlapMemberInfoHierarchy_HierarchyStateChanged); if (SelectedInfo.Count == 0) { if (!LoadSetWithAscendants(m_SelectedSet)) { //GetRootMembersCount(); Load(); } return memberInfoHierarchy; } //Формируем Set из элементов string Set = String.Empty; foreach (MemberChoiceSettings si in SelectedInfo) { if (!String.IsNullOrEmpty(si.UniqueName)) { if (!String.IsNullOrEmpty(Set)) Set += ","; Set += si.UniqueName; } } if (String.IsNullOrEmpty(Set)) { // GetRootMembersCount(); Load(); return memberInfoHierarchy; } Set = "{" + Set + "}"; if (!LoadSetWithAscendants(Set)) { Load(); //GetRootMembersCount(); } return memberInfoHierarchy; }