protected void CreateKPIs(CustomTreeNode parentNode, CubeDefInfo cube, bool kpiParameters) { if (cube != null) { this.IsBusy = true; m_KpiStorage = new Dictionary<string, KpiView>(); this.m_SourceKpis = cube.Kpis; this.KpiDataContainer.Grid.Columns.Clear(); this.RowIndex = this.ExecuteQueryForRow(0); this.KpisLoadCompleted += new EventHandler(KpiViewer_KpisLoadCompleted); } }
void GetCubes_InvokeCommandCompleted(DataLoaderEventArgs e, CustomTreeNode parentNode) { OlapDataLoader.DataLoaded -= new EventHandler<DataLoaderEventArgs>(OlapDataLoader_DataLoaded); List<CubeDefInfo> cubes = XmlSerializationUtility.XmlStr2Obj<List<CubeDefInfo>>(e.Result.Content); InitCubesList(cubes); }
protected override void CreateHierarchies(CustomTreeNode parentNode, DimensionInfo dimension, bool createLevels) { // Не создаем узлы для уровней base.CreateHierarchies(parentNode, dimension, false); }
void DropToArea(PivotAreaContainer container, CustomTreeNode node, bool raise_ItemsListChanged) { if (container != null && node != null) { Members_FilterWrapper custom_MemberFilter = null; // Убиваем конкурентов :D #region Узелы для элементов измерений // Если таскается элемент, то в случае если в данной области есть узел для иерархии или уровня, то элемент добавляется в фильтр var memberNode = node as MemberLiteTreeNode; if (memberNode != null && memberNode.Info != null) { // Убиваем конкурентов во всех областях кроме данной :D if (container == m_RowsAreaContainer) { m_ColumnsAreaContainer.RemoveItem(FindConcurent(m_ColumnsAreaContainer, node), false); m_FilterAreaContainer.RemoveItem(FindConcurent(m_FilterAreaContainer, node), false); m_DataAreaContainer.RemoveItem(FindConcurent(m_DataAreaContainer, node), false); } if (container == m_ColumnsAreaContainer) { m_RowsAreaContainer.RemoveItem(FindConcurent(m_RowsAreaContainer, node), false); m_FilterAreaContainer.RemoveItem(FindConcurent(m_FilterAreaContainer, node), false); m_DataAreaContainer.RemoveItem(FindConcurent(m_DataAreaContainer, node), false); } if (container == m_FilterAreaContainer) { m_ColumnsAreaContainer.RemoveItem(FindConcurent(m_ColumnsAreaContainer, node), false); m_RowsAreaContainer.RemoveItem(FindConcurent(m_RowsAreaContainer, node), false); m_DataAreaContainer.RemoveItem(FindConcurent(m_DataAreaContainer, node), false); } if (container == m_DataAreaContainer) { m_ColumnsAreaContainer.RemoveItem(FindConcurent(m_ColumnsAreaContainer, node), false); m_RowsAreaContainer.RemoveItem(FindConcurent(m_RowsAreaContainer, node), false); m_FilterAreaContainer.RemoveItem(FindConcurent(m_FilterAreaContainer, node), false); } // Находим конкурента в данной области var concurent = FindConcurent(container, node); var filtered_concurent = concurent as FilteredItemControl; if (filtered_concurent != null && filtered_concurent.FilteredWrapper != null && (filtered_concurent is Hierarchy_AreaItemControl || // Если конкурентом является иерархиия то это нормально (filtered_concurent is Level_AreaItemControl && ((Level_AreaItemControl)filtered_concurent).Level != null && ((Level_AreaItemControl)filtered_concurent).Level.UniqueName == memberNode.Info.LevelName)) // Если конкурентом является уровень, то это должен быть тот же уровень что и у элемента ) { bool isDublicate = false; // Ищем такой же элемент в фильтре foreach (var item in filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.SelectedInfo) { if (item.UniqueName == memberNode.Info.UniqueName && item.SelectState == SelectStates.Selected_Self) isDublicate = true; } if (!isDublicate) { // Добавляем сами руками в FilterSet. Он превильно сгенерируется только при закрытии диалога с фильтром if (String.IsNullOrEmpty(filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.FilterSet)) { filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.FilterSet = "{" + memberNode.Info.UniqueName + "}"; } else { String str = filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.FilterSet.Trim(); if (str.EndsWith("}")) { str = str.Substring(0, str.Length - 1); } str += ", " + memberNode.Info.UniqueName + "}"; filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.FilterSet = str; } var member_settings = new MemberChoiceSettings(memberNode.Info, SelectStates.Selected_Self); filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.SelectedInfo.Add(member_settings); } filtered_concurent.FilteredWrapper.CompositeFilter.MembersFilter.IsUsed = true; filtered_concurent.Refresh(); if (m_FilterDialogs.ContainsKey(concurent)) { ModalDialog dialog = m_FilterDialogs[concurent]; if (dialog != null) { var filterControl = dialog.Content as FilterBuilderControl; if (filterControl != null) { // Переинициализировать контрол выбора элементов измерения в фильтре при открытии filterControl.MemberChoiceIsInitialized = false; } } } RefreshMdxQuery(); return; } else { // Удаляем данного конкурента, т.к. он не поддерживает фильтр container.RemoveItem(concurent, false); } // Добавляем новый узел для иерархии // Ищем иерархию для данного элемента var hierarchyNode = m_ServerExplorer.CubeBrowser.FindHierarchyNode(memberNode.Info.HierarchyUniqueName); if (hierarchyNode != null) { custom_MemberFilter = new Members_FilterWrapper(); var member_settings = new MemberChoiceSettings(memberNode.Info, SelectStates.Selected_Self); custom_MemberFilter.SelectedInfo.Add(member_settings); custom_MemberFilter.FilterSet = "{" + memberNode.Info.UniqueName + "}"; node = hierarchyNode; } } else { AreaItemControl concurent = FindConcurent(m_RowsAreaContainer, node); m_RowsAreaContainer.RemoveItem(concurent, false); concurent = FindConcurent(m_ColumnsAreaContainer, node); m_ColumnsAreaContainer.RemoveItem(concurent, false); concurent = FindConcurent(m_FilterAreaContainer, node); m_FilterAreaContainer.RemoveItem(concurent, false); concurent = FindConcurent(m_DataAreaContainer, node); m_DataAreaContainer.RemoveItem(concurent, false); } #endregion Узелы для элементов измерений #region Узлы для вычисляемых элементов CalculatedMemberTreeNode calcMemberNode = node as CalculatedMemberTreeNode; if (calcMemberNode != null && calcMemberNode.Info != null) { // Вычисляемые элементы могут кидаться только в область данных AreaItemControl ctrl = new CalculatedMember_AreaItemControl(new CalculatedMember_AreaItemWrapper(calcMemberNode.Info), calcMemberNode.Icon); ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); ctrl.UserData = node; if (container == m_DataAreaContainer) { int count = m_DataAreaContainer.Items.Count; // В случае, если в области данных стало более одного объекта, то добавляем специальный узел Values в область колонок if (count == 1) { AreaItemControl value_ctrl = new Values_AreaItemControl(); value_ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); m_ColumnsAreaContainer.AddItem(value_ctrl, false); } m_DataAreaContainer.AddItem(ctrl, raise_ItemsListChanged); calcMemberNode.UseBoldText = true; } } #endregion Узлы для вычисляемых элементов #region Узлы для именованных наборов CalculatedNamedSetTreeNode calculatedSetNode = node as CalculatedNamedSetTreeNode; if (calculatedSetNode != null && calculatedSetNode.Info != null) { // Set(ы) могут кидаться только в области строк и столбцов AreaItemControl ctrl = new CalculateNamedSet_AreaItemControl(new CalculatedNamedSet_AreaItemWrapper(calculatedSetNode.Info), calculatedSetNode.Icon); ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); ctrl.UserData = node; if (container == m_RowsAreaContainer) { m_RowsAreaContainer.AddItem(ctrl, raise_ItemsListChanged); calculatedSetNode.UseBoldText = true; } if (container == m_ColumnsAreaContainer) { m_ColumnsAreaContainer.AddItem(ctrl, raise_ItemsListChanged); calculatedSetNode.UseBoldText = true; } } NamedSetTreeNode setNode = node as NamedSetTreeNode; if (setNode != null) { NamedSetInfo setInfo = setNode.Info as NamedSetInfo; if (setInfo != null) { // Set(ы) могут кидаться только в области строк и столбцов AreaItemControl ctrl = new NamedSet_AreaItemControl(new NamedSet_AreaItemWrapper(setInfo), setNode.Icon); ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); ctrl.UserData = node; if (container == m_RowsAreaContainer) { m_RowsAreaContainer.AddItem(ctrl, raise_ItemsListChanged); setNode.UseBoldText = true; } if (container == m_ColumnsAreaContainer) { m_ColumnsAreaContainer.AddItem(ctrl, raise_ItemsListChanged); setNode.UseBoldText = true; } } } #endregion Узлы для именованных наборов #region Узлы метаданных (InfoBaseTreeNode) InfoBaseTreeNode info_node = node as InfoBaseTreeNode; if (info_node != null) { HierarchyInfo hierarchyInfo = info_node.Info as HierarchyInfo; LevelInfo levelInfo = info_node.Info as LevelInfo; MeasureInfo measureInfo = info_node.Info as MeasureInfo; KpiInfo kpiInfo = info_node.Info as KpiInfo; // Иерархии и уровни можно кидать только в области: строк, столбцов, фильтров if (hierarchyInfo != null || levelInfo != null) { FilteredItemControl ctrl = null; if (hierarchyInfo != null) ctrl = new Hierarchy_AreaItemControl(new Hierarchy_AreaItemWrapper(hierarchyInfo), info_node.Icon); if (levelInfo != null) ctrl = new Level_AreaItemControl(new Level_AreaItemWrapper(levelInfo), info_node.Icon); ctrl.ShowFilter += new EventHandler(FilteredItem_ShowFilter); ctrl.CancelFilter += new EventHandler(FilteredItem_CancelFilter); ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); ctrl.UserData = node; if (custom_MemberFilter != null) { ctrl.FilteredWrapper.CompositeFilter.MembersFilter = custom_MemberFilter; ctrl.FilteredWrapper.CompositeFilter.MembersFilter.IsUsed = true; ctrl.Refresh(); } if (container == m_RowsAreaContainer) { m_RowsAreaContainer.AddItem(ctrl, raise_ItemsListChanged); info_node.UseBoldText = true; } if (container == m_ColumnsAreaContainer) { m_ColumnsAreaContainer.AddItem(ctrl, raise_ItemsListChanged); info_node.UseBoldText = true; } if (container == m_FilterAreaContainer) { m_FilterAreaContainer.AddItem(ctrl, raise_ItemsListChanged); info_node.UseBoldText = true; } } // меры и Kpi могут кидаться только в область данных if (measureInfo != null || kpiInfo != null) { AreaItemControl ctrl = null; if (measureInfo != null) ctrl = new Measure_AreaItemControl(new Measure_AreaItemWrapper(measureInfo), info_node.Icon); if (kpiInfo != null) { KpiControlType type = KpiControlType.Value; if (node is KpiStatusTreeNode) type = KpiControlType.Status; if (node is KpiTrendTreeNode) type = KpiControlType.Trend; if (node is KpiGoalTreeNode) type = KpiControlType.Goal; ctrl = new Kpi_AreaItemControl(new Kpi_AreaItemWrapper(kpiInfo, type), info_node.Icon); } if (ctrl != null) { ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); ctrl.UserData = node; if (container == m_DataAreaContainer) { int count = m_DataAreaContainer.Items.Count; // В случае, если в области данных стало более одного объекта, то добавляем специальный узел Values в область колонок if (count == 1) { AreaItemControl value_ctrl = new Values_AreaItemControl(); value_ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); m_ColumnsAreaContainer.AddItem(value_ctrl, false); } m_DataAreaContainer.AddItem(ctrl, raise_ItemsListChanged); info_node.UseBoldText = true; } } } } #endregion Узлы метаданных (InfoBaseTreeNode) } }
void DropToArea(PivotAreaContainer container, CustomTreeNode node) { DropToArea(container, node, true); }
void ShowErrorInTree(CustomTreeNode parentNode) { if (parentNode != null) { parentNode.IsError = true; } else { Tree.IsError = true; } }