public PivotMdxDesignerControl() { ScrollViewer Scroll = new ScrollViewer(); Scroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; Scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; LayoutRoot = new Grid(); LayoutRoot.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); LayoutRoot.RowDefinitions.Add(new RowDefinition()); m_Input_Column = new ColumnDefinition() { Width = new GridLength(m_InputColumnWidth) }; LayoutRoot.ColumnDefinitions.Add(m_Input_Column); LayoutRoot.ColumnDefinitions.Add(new ColumnDefinition() { /*Width = new GridLength(2, GridUnitType.Star)*/ }); // ТУЛБАР m_ToolBar = new RanetToolBar(); m_ToolBar.Margin = new Thickness(0, 0, 0, 4); LayoutRoot.Children.Add(m_ToolBar); Grid.SetColumnSpan(m_ToolBar, 2); m_ShowMetadataArea = new RanetToggleButton(); m_ShowMetadataArea.ClickMode = ClickMode.Press; m_ShowMetadataArea.Click += new RoutedEventHandler(m_ShowMetadataArea_Click); m_ShowMetadataArea.IsChecked = new bool?(true); m_ShowMetadataArea.Content = UiHelper.CreateIcon(UriResources.Images.Menu16); ToolTipService.SetToolTip(m_ShowMetadataArea, Localization.MdxDesigner_ShowQueryDesigner_ToolTip); m_ToolBar.AddItem(m_ShowMetadataArea); m_ShowMDXQuery = new RanetToggleButton(); m_ShowMDXQuery.ClickMode = ClickMode.Press; m_ShowMDXQuery.Click += new RoutedEventHandler(m_ShowMDXQuery_Click); m_ShowMDXQuery.IsChecked = new bool?(false); m_ShowMDXQuery.Content = UiHelper.CreateIcon(UriResources.Images.Mdx16); ToolTipService.SetToolTip(m_ShowMDXQuery, Localization.MdxDesigner_ShowQuery_ToolTip); m_ToolBar.AddItem(m_ShowMDXQuery); m_EditMDXQuery = new RanetToggleButton(); m_EditMDXQuery.ClickMode = ClickMode.Press; m_EditMDXQuery.Click += new RoutedEventHandler(m_EditMDXQuery_Click); m_EditMDXQuery.IsChecked = new bool?(false); m_EditMDXQuery.Content = UiHelper.CreateIcon(UriResources.Images.Edit16); ToolTipService.SetToolTip(m_EditMDXQuery, Localization.MdxDesigner_EditQuery_ToolTip); m_ToolBar.AddItem(m_EditMDXQuery); m_RunAreaSplitter = new RanetToolBarSplitter(); m_ToolBar.AddItem(m_RunAreaSplitter); m_CalculatedMemberEditor = new RanetToolBarButton(); m_CalculatedMemberEditor.Content = UiHelper.CreateIcon(UriResources.Images.CustomCalculations16); m_CalculatedMemberEditor.Click += new RoutedEventHandler(m_CalculatedMemberEditor_Click); ToolTipService.SetToolTip(m_CalculatedMemberEditor, Localization.MdxDesigner_CalculatedMemberEditor); m_ToolBar.AddItem(m_CalculatedMemberEditor); m_RunQueryAutomatic = new RanetToggleButton(); m_RunQueryAutomatic.ClickMode = ClickMode.Press; m_RunQueryAutomatic.IsChecked = new bool?(true); m_RunQueryAutomatic.Content = UiHelper.CreateIcon(UriResources.Images.AutoRun16); ToolTipService.SetToolTip(m_RunQueryAutomatic, Localization.MdxDesigner_RunQueryAutomatic); m_ToolBar.AddItem(m_RunQueryAutomatic); m_ExecuteQuery = new RanetToolBarButton(); m_ExecuteQuery.Content = UiHelper.CreateIcon(UriResources.Images.Run16); m_ExecuteQuery.Click += new RoutedEventHandler(m_ExecuteQuery_Click); ToolTipService.SetToolTip(m_ExecuteQuery, Localization.MdxDesigner_ExecuteQuery); m_ToolBar.AddItem(m_ExecuteQuery); m_StorageAreaSplitter = new RanetToolBarSplitter(); m_ToolBar.AddItem(m_StorageAreaSplitter); m_ImportLayout = new RanetToolBarButton(); m_ImportLayout.Content = UiHelper.CreateIcon(UriResources.Images.FileImport16); m_ImportLayout.Click += new RoutedEventHandler(m_ImportLayout_Click); ToolTipService.SetToolTip(m_ImportLayout, Localization.MdxDesigner_ImportLayout_ToolTip); m_ToolBar.AddItem(m_ImportLayout); m_ExportLayout = new RanetToolBarButton(); m_ExportLayout.Content = UiHelper.CreateIcon(UriResources.Images.FileExport16); m_ExportLayout.Click += new RoutedEventHandler(m_ExportLayout_Click); ToolTipService.SetToolTip(m_ExportLayout, Localization.MdxDesigner_ExportLayout_ToolTip); m_ToolBar.AddItem(m_ExportLayout); Grid Input_LayoutRoot = new Grid(); Input_LayoutRoot.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(2, GridUnitType.Star) }); Input_LayoutRoot.Margin = new Thickness(0, 0, 0, 0); Input_LayoutRoot.RowDefinitions.Add(new RowDefinition()); Input_Border = new Border() { Padding = new Thickness(3), BorderBrush = new SolidColorBrush(Colors.DarkGray), BorderThickness = new Thickness(1) }; Input_Border.Margin = new Thickness(0, 0, 3, 0); Input_Border.Child = Input_LayoutRoot; Grid Ouput_LayoutRoot = new Grid(); Ouput_LayoutRoot.Margin = new Thickness(0, 0, 0, 0); // По умолчанию высота 0 m_MDX_Row = new RowDefinition(){ Height = new GridLength(0.0)}; Ouput_LayoutRoot.RowDefinitions.Add(m_MDX_Row); Ouput_LayoutRoot.RowDefinitions.Add(new RowDefinition() /*{ Height = new GridLength(2, GridUnitType.Star) }*/); LayoutRoot.Children.Add(Input_Border); Grid.SetRow(Input_Border, 1); LayoutRoot.Children.Add(Ouput_LayoutRoot); Grid.SetRow(Ouput_LayoutRoot, 1); Grid.SetColumn(Ouput_LayoutRoot, 1); LayoutRoot_VertSplitter = new GridSplitter(); LayoutRoot_VertSplitter.VerticalAlignment = VerticalAlignment.Stretch; LayoutRoot_VertSplitter.HorizontalAlignment = HorizontalAlignment.Right; LayoutRoot_VertSplitter.Width = 3; LayoutRoot_VertSplitter.IsTabStop = false; LayoutRoot_VertSplitter.Background = new SolidColorBrush(Colors.Transparent); LayoutRoot.Children.Add(LayoutRoot_VertSplitter); Grid.SetRow(LayoutRoot_VertSplitter, 1); Grid.SetColumn(LayoutRoot_VertSplitter, 0); // Информация о кубе Grid Cube_LayotRoot = new Grid(); Cube_LayotRoot.Margin = new Thickness(0, 3, 0, 0); Cube_LayotRoot.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); Cube_LayotRoot.RowDefinitions.Add(new RowDefinition()); // Заголовок //HeaderControl cube_Header = new HeaderControl(UriResources.Images.Cube16, Localization.MdxDesigner_CubeMetadata) { Margin = new Thickness(0, 0, 0, 3) }; //Cube_LayotRoot.Children.Add(cube_Header); // Просмотрщик куба m_ServerExplorer = new ServerExplorerCtrl(); m_ServerExplorer.CubeBrowser.DragNodes = true; m_ServerExplorer.CubeBrowser.DragStarted += new EventHandler<DragNodeArgs<DragStartedEventArgs>>(m_CubeBrowser_DragStarted); m_ServerExplorer.CubeBrowser.DragDelta += new EventHandler<DragNodeArgs<DragDeltaEventArgs>>(m_CubeBrowser_DragDelta); m_ServerExplorer.CubeBrowser.DragCompleted += new EventHandler<DragNodeArgs<DragCompletedEventArgs>>(m_CubeBrowser_DragCompleted); m_ServerExplorer.CubeSelected += new EventHandler<CustomEventArgs<string>>(m_ServerExplorer_CubeSelected); Cube_LayotRoot.Children.Add(m_ServerExplorer); Grid.SetRow(m_ServerExplorer, 1); Input_LayoutRoot.Children.Add(Cube_LayotRoot); Grid.SetRow(Cube_LayotRoot, 0); Areas_LayoutRoot = new Grid(); Areas_LayoutRoot.ColumnDefinitions.Add(new ColumnDefinition()); Areas_LayoutRoot.ColumnDefinitions.Add(new ColumnDefinition()); Areas_LayoutRoot.RowDefinitions.Add(new RowDefinition()); Areas_LayoutRoot.RowDefinitions.Add(new RowDefinition()); m_FilterAreaContainer = new PivotAreaContainer(); m_FilterAreaContainer.ItemRemoved += new EventHandler<AreaItemArgs>(AreaContainer_ItemRemoved); m_FilterAreaContainer.Margin = new Thickness(0, 5, 0, 0); m_FilterAreaContainer.Icon = UriResources.Images.FiltersArea16; m_FilterAreaContainer.Caption = Localization.MdxDesigner_FilterArea_Caption; m_FilterAreaContainer.BeforeShowContextMenu += new EventHandler<AreaItemArgs>(m_FilterAreaContainer_BeforeShowContextMenu); m_FilterAreaContainer.ItemsListChanged += new EventHandler(AreaContainer_ItemsListChanged); Areas_LayoutRoot.Children.Add(m_FilterAreaContainer); Grid.SetRow(m_FilterAreaContainer, 0); Grid.SetColumn(m_FilterAreaContainer, 0); m_RowsAreaContainer = new PivotAreaContainer(); m_RowsAreaContainer.ItemRemoved += new EventHandler<AreaItemArgs>(AreaContainer_ItemRemoved); m_RowsAreaContainer.Margin = new Thickness(0, 5, 0, 0); m_RowsAreaContainer.Icon = UriResources.Images.RowsArea16; m_RowsAreaContainer.Caption = Localization.MdxDesigner_RowsArea_Caption; m_RowsAreaContainer.BeforeShowContextMenu += new EventHandler<AreaItemArgs>(m_RowsAreaContainer_BeforeShowContextMenu); m_RowsAreaContainer.ItemsListChanged += new EventHandler(AreaContainer_ItemsListChanged); Areas_LayoutRoot.Children.Add(m_RowsAreaContainer); Grid.SetRow(m_RowsAreaContainer, 1); Grid.SetColumn(m_RowsAreaContainer, 0); m_ColumnsAreaContainer = new PivotAreaContainer(); m_ColumnsAreaContainer.ItemRemoved += new EventHandler<AreaItemArgs>(AreaContainer_ItemRemoved); m_ColumnsAreaContainer.Margin = new Thickness(5, 5, 0, 0); m_ColumnsAreaContainer.Icon = UriResources.Images.ColumnsArea16; m_ColumnsAreaContainer.Caption = Localization.MdxDesigner_ColumnsArea_Caption; m_ColumnsAreaContainer.BeforeShowContextMenu += new EventHandler<AreaItemArgs>(m_ColumnsAreaContainer_BeforeShowContextMenu); m_ColumnsAreaContainer.ItemsListChanged += new EventHandler(AreaContainer_ItemsListChanged); Areas_LayoutRoot.Children.Add(m_ColumnsAreaContainer); Grid.SetRow(m_ColumnsAreaContainer, 0); Grid.SetColumn(m_ColumnsAreaContainer, 1); m_DataAreaContainer = new PivotAreaContainer(); m_DataAreaContainer.ItemRemoved += new EventHandler<AreaItemArgs>(AreaContainer_ItemRemoved); m_DataAreaContainer.Margin = new Thickness(5, 5, 0, 0); m_DataAreaContainer.Icon = UriResources.Images.DataArea16; m_DataAreaContainer.Caption = Localization.MdxDesigner_DataArea_Caption; m_DataAreaContainer.ItemsListChanged += new EventHandler(AreaContainer_ItemsListChanged); Areas_LayoutRoot.Children.Add(m_DataAreaContainer); Grid.SetRow(m_DataAreaContainer, 1); Grid.SetColumn(m_DataAreaContainer, 1); Input_LayoutRoot.Children.Add(Areas_LayoutRoot); Grid.SetRow(Areas_LayoutRoot, 1); GridSplitter Input_HorzSplitter = new GridSplitter(); Input_HorzSplitter.VerticalAlignment = VerticalAlignment.Bottom; Input_HorzSplitter.HorizontalAlignment = HorizontalAlignment.Stretch; Input_HorzSplitter.Height = 3; Input_HorzSplitter.IsTabStop = false; Input_HorzSplitter.Background = new SolidColorBrush(Colors.Transparent); Input_LayoutRoot.Children.Add(Input_HorzSplitter); Grid.SetRow(Input_HorzSplitter, 0); Grid.SetColumn(Input_HorzSplitter, 0); // Результат выполнения запроса Grid Pivot_LayotRoot = new Grid(); Pivot_LayotRoot.Margin = new Thickness(0, 3, 0, 0); Pivot_LayotRoot.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); Pivot_LayotRoot.RowDefinitions.Add(new RowDefinition()); // Заголовок HeaderControl pivot_Header = new HeaderControl(UriResources.Images.PivotGrid16, Localization.MdxDesigner_QueryResult) { Margin = new Thickness(0, 0, 0, 3) }; Pivot_LayotRoot.Children.Add(pivot_Header); // Сводная таблица m_PivotGrid = new UpdateablePivotGridControl(); m_PivotGrid.Margin = new Thickness(0, 0, 0, 0); m_PivotGrid.IsUpdateable = true; m_PivotGrid.ColumnsIsInteractive = true; m_PivotGrid.RowsIsInteractive = true; m_PivotGrid.ShowToolBar = true; Pivot_LayotRoot.Children.Add(m_PivotGrid); Grid.SetRow(m_PivotGrid, 1); Border Pivot_Border = new Border() { Padding = new Thickness(3), BorderBrush = new SolidColorBrush(Colors.DarkGray), BorderThickness = new Thickness(1) }; Pivot_Border.Margin = new Thickness(0, 0, 0, 0); Pivot_Border.Child = Pivot_LayotRoot; Ouput_LayoutRoot.Children.Add(Pivot_Border); Grid.SetRow(Pivot_Border, 1); Output_HorzSplitter = new GridSplitter(); Output_HorzSplitter.VerticalAlignment = VerticalAlignment.Bottom; Output_HorzSplitter.HorizontalAlignment = HorizontalAlignment.Stretch; Output_HorzSplitter.Height = 3; Output_HorzSplitter.IsTabStop = false; Output_HorzSplitter.Background = new SolidColorBrush(Colors.Transparent); Ouput_LayoutRoot.Children.Add(Output_HorzSplitter); Grid.SetRow(Output_HorzSplitter, 0); Grid.SetColumn(Output_HorzSplitter, 0); // Информация о MDX запросе Grid Mdx_LayotRoot = new Grid(); Mdx_LayotRoot.Margin = new Thickness(0, 3, 0, 0); Mdx_LayotRoot.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); Mdx_LayotRoot.RowDefinitions.Add(new RowDefinition()); // Заголовок HeaderControl mdx_Header = new HeaderControl(UriResources.Images.Mdx16, Localization.MdxDesigner_MdxQuery) { Margin = new Thickness(0, 0, 0, 3) }; Mdx_LayotRoot.Children.Add(mdx_Header); // Текст запроса m_MdxQuery = new RichTextBox(); m_MdxQuery.AcceptsReturn = true; m_MdxQuery.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; m_MdxQuery.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; m_MdxQuery.IsReadOnly = true; Mdx_LayotRoot.Children.Add(m_MdxQuery); Grid.SetRow(m_MdxQuery, 1); Mdx_Border = new Border() { Padding = new Thickness(3), BorderBrush = new SolidColorBrush(Colors.DarkGray), BorderThickness = new Thickness(1) }; Mdx_Border.Margin = new Thickness(0, 0, 0, 4); Mdx_Border.Child = Mdx_LayotRoot; Ouput_LayoutRoot.Children.Add(Mdx_Border); Grid.SetRow(Mdx_Border, 0); AllowDragDrop(m_FilterAreaContainer); AllowDragDrop(m_ColumnsAreaContainer); AllowDragDrop(m_RowsAreaContainer); AllowDragDrop(m_DataAreaContainer); //Scroll.Content = LayoutRoot; m_ServerExplorer.OlapDataLoader = GetOlapDataLoader(); m_PivotGrid.OlapDataLoader = GetOlapDataLoader(); m_StorageManager = GetStorageManager(); m_StorageManager.InvokeCompleted += new EventHandler<DataLoaderEventArgs>(StorageManager_ActionCompleted); this.Content = LayoutRoot; }
void AllowDragDrop(PivotAreaContainer area) { if (area != null) { area.DragStarted += new EventHandler<DragAreaItemArgs<DragStartedEventArgs>>(area_DragStarted); area.DragDelta += new EventHandler<DragAreaItemArgs<DragDeltaEventArgs>>(area_DragDelta); area.DragCompleted += new EventHandler<DragAreaItemArgs<DragCompletedEventArgs>>(area_DragCompleted); } }
/// <summary> /// Обновляет информацию о вычислениях. Удаляет лишние, обновляет информацию у существующих /// </summary> /// <param name="area">Область для обновления</param> void RefreshCalculationItems(PivotAreaContainer area) { if (area != null) { List<AreaItemControl> toDelete = new List<AreaItemControl>(); foreach (AreaItemControl child in area.Items) { InfoItemControl info_ctrl = child as InfoItemControl; if (info_ctrl != null) { Calculated_AreaItemWrapper calculated = info_ctrl.Wrapper as Calculated_AreaItemWrapper; if (calculated != null) { CalculationInfoBase item = null; if (calculated is CalculatedMember_AreaItemWrapper) { item = GetCalculatedMember(calculated.Name); } if (calculated is CalculatedNamedSet_AreaItemWrapper) { item = GetCalculatedNamedSet(calculated.Name); } if (item == null) { toDelete.Add(child); } else { info_ctrl.Caption = calculated.Caption; } } } } // Удаляем элементы, которые уже удалены в дизайнере foreach (AreaItemControl child in toDelete) { area.RemoveItem(child); } } }
void HighLightCustomNodes(PivotAreaContainer area) { if (area != null) { foreach (AreaItemControl child in area.Items) { InfoItemControl info_ctrl = child as InfoItemControl; if (info_ctrl != null) { CustomTreeNode node = FindCustomNode(info_ctrl.Wrapper); if (node != null) node.UseBoldText = true; } } } }
List<NamedSet_AreaItemControl> GetUsedNamedSets(PivotAreaContainer area) { List<NamedSet_AreaItemControl> list = new List<NamedSet_AreaItemControl>(); if (area != null) { foreach (AreaItemControl child in area.Items) { NamedSet_AreaItemControl set_ctrl = child as NamedSet_AreaItemControl; if (set_ctrl != null) { if (!list.Contains(set_ctrl)) { list.Add(set_ctrl); } } } } return list; }
List<CalculationInfoBase> GetUsedCalculatedMembers(PivotAreaContainer area) { List<CalculationInfoBase> list = new List<CalculationInfoBase>(); if (area != null) { foreach (AreaItemControl child in area.Items) { CalculatedMember_AreaItemControl member_ctrl = child as CalculatedMember_AreaItemControl; if (member_ctrl != null) { CalculationInfoBase item = GetCalculatedMember(member_ctrl.CalculatedMember.Name); if (item != null && !list.Contains(item)) { list.Add(item); } } CalculateNamedSet_AreaItemControl set_ctrl = child as CalculateNamedSet_AreaItemControl; if (set_ctrl != null) { CalculationInfoBase item = GetCalculatedNamedSet(set_ctrl.CalculatedNamedSet.Name); if (item != null && !list.Contains(item)) { list.Add(item); } } } } return list; }
void BuildFromItemWrappers(PivotAreaContainer container, List<AreaItemWrapper> wrappers) { if (container != null) { container.Clear(); if (wrappers != null) { container.ItemsListChanged -= new EventHandler(AreaContainer_ItemsListChanged); foreach (AreaItemWrapper wrapper in wrappers) { AreaItemControl ctrl = null; CustomTreeNode nodeInTree = FindCustomNode(wrapper); Values_AreaItemWrapper values_item = wrapper as Values_AreaItemWrapper; if (values_item != null) { ctrl = new Values_AreaItemControl(); } Measure_AreaItemWrapper measures_item = wrapper as Measure_AreaItemWrapper; if (measures_item != null) { ctrl = new Measure_AreaItemControl(measures_item); } CalculatedMember_AreaItemWrapper calcMember_item = wrapper as CalculatedMember_AreaItemWrapper; if (calcMember_item != null) { ctrl = new CalculatedMember_AreaItemControl(calcMember_item); } CalculatedNamedSet_AreaItemWrapper calculatedSet_item = wrapper as CalculatedNamedSet_AreaItemWrapper; if (calculatedSet_item != null) { ctrl = new CalculateNamedSet_AreaItemControl(calculatedSet_item); } NamedSet_AreaItemWrapper set_item = wrapper as NamedSet_AreaItemWrapper; if (set_item != null) { ctrl = new NamedSet_AreaItemControl(set_item); } Level_AreaItemWrapper level_item = wrapper as Level_AreaItemWrapper; if (level_item != null) { ctrl = new Level_AreaItemControl(level_item); } Hierarchy_AreaItemWrapper hierarchy_item = wrapper as Hierarchy_AreaItemWrapper; if (hierarchy_item != null) { ctrl = new Hierarchy_AreaItemControl(hierarchy_item); } Kpi_AreaItemWrapper kpi_item = wrapper as Kpi_AreaItemWrapper; if (kpi_item != null) { ctrl = new Kpi_AreaItemControl(kpi_item); } if (ctrl != null) { if (nodeInTree != null) { ctrl.UserData = nodeInTree; ctrl.Icon = nodeInTree.Icon; nodeInTree.UseBoldText = true; } container.AddItem(ctrl); ctrl.ContextMenuCreated += new EventHandler(ctrl_ContextMenuCreated); FilteredItemControl filtered_item = ctrl as FilteredItemControl; if (filtered_item != null) { filtered_item.ShowFilter += new EventHandler(FilteredItem_ShowFilter); filtered_item.CancelFilter += new EventHandler(FilteredItem_CancelFilter); } } } container.ItemsListChanged += new EventHandler(AreaContainer_ItemsListChanged); } } }
List<AreaItemWrapper> GetItemWrappers(PivotAreaContainer container) { List<AreaItemWrapper> list = new List<AreaItemWrapper>(); if (container != null) { foreach (AreaItemControl item in container.Items) { Values_AreaItemControl values_item = item as Values_AreaItemControl; if (values_item != null) { list.Add(new Values_AreaItemWrapper()); continue; } Measure_AreaItemControl measures_item = item as Measure_AreaItemControl; if (measures_item != null) { list.Add(measures_item.Measure); continue; } CalculateNamedSet_AreaItemControl calculatedSet_item = item as CalculateNamedSet_AreaItemControl; if (calculatedSet_item != null) { list.Add(calculatedSet_item.CalculatedNamedSet); continue; } NamedSet_AreaItemControl set_item = item as NamedSet_AreaItemControl; if (set_item != null) { list.Add(set_item.NamedSet); continue; } CalculatedMember_AreaItemControl calcMember_item = item as CalculatedMember_AreaItemControl; if (calcMember_item != null) { list.Add(calcMember_item.CalculatedMember); continue; } FilteredItemControl level_item = item as FilteredItemControl; if (level_item != null) { list.Add(level_item.Wrapper); continue; } Kpi_AreaItemControl kpi_item = item as Kpi_AreaItemControl; if (kpi_item != null) { list.Add(kpi_item.Kpi); continue; } } } return list; }
AreaItemControl FindValuesItem(PivotAreaContainer container) { if (container != null) { foreach (AreaItemControl item in container.Items) { if (item is Values_AreaItemControl) return item; } } return null; }
/// <summary> /// Возвращает конкурента для элемента в указанной области. Конкурентами (для строк, колонок, фильтров) считаются элементы, принадлежащие одной иерархии /// Конкурентами для области данных являются элементы (меры, вычисляемые элементы) с таким же именем /// </summary> /// <param name="container"></param> /// <param name="node"></param> /// <returns></returns> AreaItemControl FindConcurent(PivotAreaContainer container, TreeViewItem node) { if (container != null) { InfoBaseTreeNode infoNode = node as InfoBaseTreeNode; if (container == m_DataAreaContainer) { CalculatedMemberTreeNode calcMemberNode = node as CalculatedMemberTreeNode; if (infoNode != null || calcMemberNode != null) { KpiInfo kpi = infoNode != null ? infoNode.Info as KpiInfo : null; MeasureInfo measure = infoNode != null ? infoNode.Info as MeasureInfo : null; CalcMemberInfo member = calcMemberNode != null ? calcMemberNode.Info : null; List<AreaItemControl> items = container.Items; foreach (AreaItemControl item in items) { Measure_AreaItemControl measure_Item = item as Measure_AreaItemControl; if (measure_Item != null && measure != null && measure.UniqueName == measure_Item.Measure.UniqueName) { return item; } Kpi_AreaItemControl kpi_Item = item as Kpi_AreaItemControl; if (kpi_Item != null && kpi != null && kpi.Name == kpi_Item.Kpi.Name) { return item; } CalculatedMember_AreaItemControl member_Item = item as CalculatedMember_AreaItemControl; if (member_Item != null && member != null && member.Name == member_Item.CalculatedMember.Name) { return item; } } } } if (container == m_RowsAreaContainer || container == m_ColumnsAreaContainer || container == m_FilterAreaContainer) { var setNode = node as CalculatedNamedSetTreeNode; var memberNode = node as MemberLiteTreeNode; if (infoNode != null || setNode != null || memberNode != null) { // если node - узел иерархии, то ищем по уникальному имени еирархии среди элементов // если node - узел уровня, то ищем по уникальному имени иерархии, которой этот узел принадлежит HierarchyInfo hierarchy = infoNode != null ? infoNode.Info as HierarchyInfo : null; LevelInfo level = infoNode != null ? infoNode.Info as LevelInfo : null; CalculatedNamedSetInfo calculatedSet = setNode != null ? setNode.Info : null; NamedSetInfo set = infoNode != null ? infoNode.Info as NamedSetInfo : null; List<AreaItemControl> items = container.Items; foreach (AreaItemControl item in items) { CalculateNamedSet_AreaItemControl calculatedSet_Item = item as CalculateNamedSet_AreaItemControl; if (calculatedSet_Item != null && calculatedSet != null && calculatedSet.Name == calculatedSet_Item.CalculatedNamedSet.Name) { return item; } NamedSet_AreaItemControl set_Item = item as NamedSet_AreaItemControl; if (set_Item != null && set != null && set.Name == set_Item.NamedSet.Name) { return item; } Hierarchy_AreaItemControl hierarchy_Item = item as Hierarchy_AreaItemControl; if (hierarchy_Item != null) { if (hierarchy != null && hierarchy_Item.Hierarchy.UniqueName == hierarchy.UniqueName) { return item; } if (level != null && hierarchy_Item.Hierarchy.UniqueName == level.ParentHirerachyId) { return item; } if (memberNode != null && memberNode.Info != null && hierarchy_Item.Hierarchy.UniqueName == memberNode.Info.HierarchyUniqueName) { return item; } } Level_AreaItemControl level_Item = item as Level_AreaItemControl; if (level_Item != null) { if (hierarchy != null && level_Item.Level.HierarchyUniqueName == hierarchy.UniqueName) { return item; } if (level != null && level_Item.Level.HierarchyUniqueName == level.ParentHirerachyId) { return item; } if (memberNode != null && memberNode.Info != null && level_Item.Level.HierarchyUniqueName == memberNode.Info.HierarchyUniqueName) { return item; } } } } } } return null; }
String BuildAreaSet(PivotAreaContainer area) { String tmp = string.Empty; String result = String.Empty; String hierarchize_Blank = "Hierarchize({0})"; if (area != null) { // Список из распаршенных элементов области List<String> list = new List<string>(); foreach (AreaItemControl child in area.Items) { tmp = BuildItemSet(child); if (!String.IsNullOrEmpty(tmp)) list.Add(tmp); } if (list.Count > 0) { if (list.Count == 1) { // Один элемент result = String.Format(hierarchize_Blank, list[0]); } else { int i = 0; int crossCount = 0; // Пересечение элементов foreach (String set in list) { if(i > 0) result += ", "; if (i < list.Count - 1) { result += "CrossJoin("; crossCount++; } result += set; i++; } for (int x = 0; x < crossCount; x++) { result += ")"; } result = String.Format(hierarchize_Blank, result); } } } return result; }
List<String> BuildFilterSubCubes(PivotAreaContainer area) { List<String> result = new List<string>(); if (area != null) { foreach (AreaItemControl child in area.Items) { FilteredItemControl filtered_Item = child as FilteredItemControl; if (filtered_Item != null) { if (filtered_Item.FilteredWrapper.CompositeFilter.Filter.IsUsed) { String set = BuildItemSet(child); #region Top-Filter if (filtered_Item.FilteredWrapper.CompositeFilter.Filter.CurrentFilter == FilterFamilyTypes.TopFilter) { String function = String.Empty; switch (filtered_Item.FilteredWrapper.CompositeFilter.Filter.TopFilter.FilterType) { case TopFilterTypes.Top: switch (filtered_Item.FilteredWrapper.CompositeFilter.Filter.TopFilter.FilterTarget) { case TopFilterTargetTypes.Items: function = "TopCount"; break; case TopFilterTargetTypes.Percent: function = "TopPercent"; break; case TopFilterTargetTypes.Sum: function = "TopSum"; break; } break; case TopFilterTypes.Bottom: switch (filtered_Item.FilteredWrapper.CompositeFilter.Filter.TopFilter.FilterTarget) { case TopFilterTargetTypes.Items: function = "BottomCount"; break; case TopFilterTargetTypes.Percent: function = "BottomPercent"; break; case TopFilterTargetTypes.Sum: function = "BottomSum"; break; } break; } if(!String.IsNullOrEmpty(function) && !String.IsNullOrEmpty(set)) { String Top_Template = " " + function + "({0}, {1}, {2})"; set = String.Format(Top_Template, set, filtered_Item.FilteredWrapper.CompositeFilter.Filter.TopFilter.Count.ToString(), filtered_Item.FilteredWrapper.CompositeFilter.Filter.TopFilter.MeasureUniqueName); result.Add(set); } } #endregion Top-Filter #region Value-Filter if (filtered_Item.FilteredWrapper.CompositeFilter.Filter.CurrentFilter == FilterFamilyTypes.ValueFilter) { String function = String.Empty; switch (filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.FilterType) { case ValueFilterTypes.Equal: function = "="; break; case ValueFilterTypes.NotEqual: function = "<>"; break; case ValueFilterTypes.Less: function = "<"; break; case ValueFilterTypes.LessOrEqual: function = "<="; break; case ValueFilterTypes.Greater: function = ">"; break; case ValueFilterTypes.GreaterOrEqual: function = ">="; break; } if (!String.IsNullOrEmpty(set)) { if (!String.IsNullOrEmpty(function)) { String Top_Template = " Filter(Hierarchize({0}), ({1} " + function + " {2}))"; set = String.Format(Top_Template, set, filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.MeasureUniqueName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.Num1.ToString()); result.Add(set); } else { if (filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.FilterType == ValueFilterTypes.Between || filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.FilterType == ValueFilterTypes.NotBetween) { String Top_Template = " Filter(Hierarchize({0}), ({1} >= {2} AND {1} <= {3}))"; if(filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.FilterType == ValueFilterTypes.NotBetween) Top_Template = " Filter(Hierarchize({0}), ({1} < {2} OR {1} > {3}))"; set = String.Format(Top_Template, set, filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.MeasureUniqueName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.Num1.ToString(), filtered_Item.FilteredWrapper.CompositeFilter.Filter.ValueFilter.Num2.ToString()); result.Add(set); } } } } #endregion Value-Filter #region Label-Filter if (filtered_Item.FilteredWrapper.CompositeFilter.Filter.CurrentFilter == FilterFamilyTypes.LabelFilter) { Hierarchy_AreaItemControl hierarchy_Item = filtered_Item as Hierarchy_AreaItemControl; Level_AreaItemControl level_Item = filtered_Item as Level_AreaItemControl; String hierarchy_UniqueName = String.Empty; if (hierarchy_Item != null) { hierarchy_UniqueName = hierarchy_Item.Hierarchy.UniqueName; } if (level_Item != null) { hierarchy_UniqueName = level_Item.Level.HierarchyUniqueName; } String Filter_Template = String.Empty; String BeginEnd_Template = String.Empty; String Between_Template = String.Empty; switch (filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.FilterType) { case LabelFilterTypes.Equal: Filter_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") = \"{3}\"))"; ; break; case LabelFilterTypes.NotEqual: Filter_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") <> \"{3}\"))"; break; case LabelFilterTypes.Less: Filter_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") < \"{3}\"))"; break; case LabelFilterTypes.LessOrEqual: Filter_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") <= \"{3}\"))"; break; case LabelFilterTypes.Greater: Filter_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") > \"{3}\"))"; break; case LabelFilterTypes.GreaterOrEqual: Filter_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") >= \"{3}\"))"; break; case LabelFilterTypes.BeginWith: BeginEnd_Template = "Filter({0}, (Left({1}.CurrentMember.Properties(\"{2}\"), {3}) = \"{4}\"))"; break; case LabelFilterTypes.EndWith: BeginEnd_Template = "Filter({0}, (Right({1}.CurrentMember.Properties(\"{2}\"), {3}) = \"{4}\"))"; break; case LabelFilterTypes.NotEndWith: BeginEnd_Template = "Filter({0}, (Right({1}.CurrentMember.Properties(\"{2}\"), {3}) <> \"{4}\"))"; break; case LabelFilterTypes.Contain: Filter_Template = "Filter({0}, (InStr(1, {1}.CurrentMember.Properties(\"{2}\"), \"{3}\") > 0))"; break; case LabelFilterTypes.NotContain: Filter_Template = "Filter({0}, (InStr(1, {1}.CurrentMember.Properties(\"{2}\"), \"{3}\") == 0))"; break; case LabelFilterTypes.Between: Between_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") >= \"{3}\") AND ({1}.CurrentMember.Properties(\"{2}\") <= \"{4}\"))"; break; case LabelFilterTypes.NotBetween: Between_Template = "Filter({0}, ({1}.CurrentMember.Properties(\"{2}\") < \"{3}\") OR ({1}.CurrentMember.Properties(\"{2}\") > \"{4}\"))"; break; } if (!String.IsNullOrEmpty(set)) { if (!String.IsNullOrEmpty(Filter_Template)) { set = String.Format(Filter_Template, set, hierarchy_UniqueName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.LevelPropertyName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.Text1); result.Add(set); } if (!String.IsNullOrEmpty(BeginEnd_Template)) { set = String.Format(BeginEnd_Template, set, hierarchy_UniqueName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.LevelPropertyName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.Text1.Length.ToString(), filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.Text1); result.Add(set); } if (!String.IsNullOrEmpty(Between_Template)) { set = String.Format(Between_Template, set, hierarchy_UniqueName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.LevelPropertyName, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.Text1, filtered_Item.FilteredWrapper.CompositeFilter.Filter.LabelFilter.Text2); result.Add(set); } } } #endregion Label-Filter } } } } return result; }
bool CanDragToArea(PivotAreaContainer container, AreaItemControl item) { if (item != null && container != null) { if (container == m_DataAreaContainer) { // В область данных можно таскать только меры, KPI и вычисляемые элементы if (item is Kpi_AreaItemControl || item is Measure_AreaItemControl || item is CalculatedMember_AreaItemControl) return true; } if (container == m_RowsAreaContainer || container == m_ColumnsAreaContainer) { // В область строк и колонок можно таскать: иерархии, уровни, Set(ы) и узел "Values" if (item is Hierarchy_AreaItemControl || item is Level_AreaItemControl || item is CalculateNamedSet_AreaItemControl || item is Values_AreaItemControl) return true; } if (container == m_FilterAreaContainer) { // В область фильтров можно таскать: иерархии, уровни if (item is Hierarchy_AreaItemControl || item is Level_AreaItemControl) return true; } } return 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); }