public String PerformMemberAction(PerformMemberActionArgs args) { if (args != null) { switch (args.Action) { case MemberActionType.Expand: case MemberActionType.Collapse: case MemberActionType.DrillDown: case MemberActionType.DrillUp: // Удаляем все элементы истории, стоящие за текущим History.CutRight(); HistoryItem clone = null; if (History.CurrentHistoryItem != null) { // Клонируем текущий элемент истории чтобы действие добавлялось уже в клон clone = (HistoryItem)(History.CurrentHistoryItem.Clone()); } else { // Добавляем пустой элемент истории HistoryItem first = new HistoryItem(); History.AddHistoryItem(first); clone = new HistoryItem(); } History.AddHistoryItem(clone); break; } switch (args.Action) { case MemberActionType.Expand: ExpandMember(args); break; case MemberActionType.Collapse: CollapseMember(args); break; case MemberActionType.DrillDown: DrillDownMember(args); break; case MemberActionType.DrillUp: DrillUpMember(args); break; } } return(RefreshQuery()); }
MemberAction CreateMemberAction(PerformMemberActionArgs args) { switch (args.Action) { case MemberActionType.Expand: return(new MemberActionExpand(args)); case MemberActionType.Collapse: return(new MemberActionCollapse(args)); case MemberActionType.DrillDown: return(new MemberActionDrillDown(args, DrillDownMode)); default: return(null); } }
public String PerformMemberAction(PerformMemberActionArgs args) { if (args != null) { var Action = CreateMemberAction(args); if (Action != null) { AddCurrentStateToHistory(); this.CurrentHistoryItem.AddMemberAction(args.AxisIndex, Action); } else if (args.Action == MemberActionType.SortByValue) { AddCurrentStateToHistory(); this.CurrentHistoryItem.SortByValue(args.AxisIndex, args); } } return(RefreshQuery()); }
void DrillUpMember(PerformMemberActionArgs args) { //using (WaitCursor wc = new WaitCursor()) { IList <DrillActionContainer> actions = null; if (!RotateAxes) { actions = args.AxisIndex == 0 ? History.CurrentHistoryItem.ColumnsActionChain : History.CurrentHistoryItem.RowsActionChain; } else { actions = args.AxisIndex == 1 ? History.CurrentHistoryItem.ColumnsActionChain : History.CurrentHistoryItem.RowsActionChain; } DrillActionContainer previous = null; DrillActionContainer container = null; // Действия над элементами из этой же иерархии IList <DrillActionContainer> actionsToHierarchy = History.CurrentHistoryItem.FindDrillActionContainersByHierarchy(actions, args.Member.HierarchyUniqueName); if (actionsToHierarchy != null) { // Все действия зануляем foreach (DrillActionContainer action in actionsToHierarchy) { action.Action = null; } } // Родители if (args.Ascendants != null) { for (int i = args.Ascendants.Count - 1; i >= 0; i--) { MemberInfo mi = args.Ascendants[i]; container = History.CurrentHistoryItem.FindDrillActionContainer(actions, mi.UniqueName); if (container == null) { container = new DrillActionContainer(mi.UniqueName, mi.HierarchyUniqueName); if (previous == null) { actions.Add(container); } else { previous.Children.Add(container); } } previous = container; } } // Сам элемент container = History.CurrentHistoryItem.FindDrillActionContainer(actions, args.Member.UniqueName); if (container == null) { container = new DrillActionContainer(args.Member.UniqueName, args.Member.HierarchyUniqueName); container.Action = new MdxDrillUpAction(args.Member.UniqueName, args.Member.HierarchyUniqueName, args.Member.LevelDepth); if (previous == null) { actions.Add(container); } else { previous.Children.Add(container); } } else { // Удаляем все вложенные экшены для данной иерархии IList <DrillActionContainer> child_actionsToHierarchy = History.CurrentHistoryItem.FindDrillActionContainersByHierarchy(container.Children, args.Member.HierarchyUniqueName); if (child_actionsToHierarchy != null) { // Все действия зануляем foreach (DrillActionContainer action in child_actionsToHierarchy) { action.Action = null; } } container.Action = new MdxDrillUpAction(args.Member.UniqueName, args.Member.HierarchyUniqueName, args.Member.LevelDepth); } } /*using (WaitCursor wc = new WaitCursor()) * { * IList<DrillActionContainer> actions = args.AxisIndex == 0 ? ColumnsActionChain : RowsActionChain; * * actions.Clear(); * * DrillActionContainer container = new DrillActionContainer(args.Member.UniqueName); * container.Action = new MdxDrillUpAction(args.Member.UniqueName); * * actions.Add(container); * * this.RefreshQuery(); * }*/ }
void CollapseMember(PerformMemberActionArgs args) { //using (WaitCursor wc = new WaitCursor()) { IList <DrillActionContainer> actions = null; if (!RotateAxes) { actions = args.AxisIndex == 0 ? History.CurrentHistoryItem.ColumnsActionChain : History.CurrentHistoryItem.RowsActionChain; } else { actions = args.AxisIndex == 1 ? History.CurrentHistoryItem.ColumnsActionChain : History.CurrentHistoryItem.RowsActionChain; } DrillActionContainer previous = null; DrillActionContainer container = null; // Родители if (args.Ascendants != null) { for (int i = args.Ascendants.Count - 1; i >= 0; i--) { MemberInfo mi = args.Ascendants[i]; container = History.CurrentHistoryItem.FindDrillActionContainer(actions, mi.UniqueName); if (container == null) { container = new DrillActionContainer(mi.UniqueName, mi.HierarchyUniqueName); if (previous == null) { actions.Add(container); } else { previous.Children.Add(container); } } previous = container; } } // Сам элемент container = History.CurrentHistoryItem.FindDrillActionContainer(actions, args.Member.UniqueName); if (container == null) { container = new DrillActionContainer(args.Member.UniqueName, args.Member.HierarchyUniqueName); container.Action = new MdxCollapseAction(args.Member.UniqueName); if (previous == null) { actions.Add(container); } else { previous.Children.Add(container); } } else { // Удалем все дочерние - тем самым как бы схлопываем элемент // Удаляем все вложенные экшены для данной иерархии IList <DrillActionContainer> actionsToHierarchy = History.CurrentHistoryItem.FindDrillActionContainersByHierarchy(container.Children, args.Member.HierarchyUniqueName); if (actionsToHierarchy != null) { // Все действия зануляем foreach (DrillActionContainer action in actionsToHierarchy) { action.Action = null; } } container.Action = new MdxCollapseAction(args.Member.UniqueName); } } }
private void ExpandMember(PerformMemberActionArgs args) { //using (WaitCursor wc = new WaitCursor()) { IList <DrillActionContainer> actions = null; if (!RotateAxes) { actions = args.AxisIndex == 0 ? History.CurrentHistoryItem.ColumnsActionChain : History.CurrentHistoryItem.RowsActionChain; } else { actions = args.AxisIndex == 1 ? History.CurrentHistoryItem.ColumnsActionChain : History.CurrentHistoryItem.RowsActionChain; } DrillActionContainer previous = null; DrillActionContainer container = null; // Родители if (args.Ascendants != null) { for (int i = args.Ascendants.Count - 1; i >= 0; i--) { MemberInfo mi = args.Ascendants[i]; container = History.CurrentHistoryItem.FindDrillActionContainer(actions, mi.UniqueName); if (container == null) { container = new DrillActionContainer(mi.UniqueName, mi.HierarchyUniqueName); if (previous == null) { actions.Add(container); } else { previous.Children.Add(container); } } previous = container; } } MdxDrillDownAction skip_container = null; // Сам элемент container = History.CurrentHistoryItem.FindDrillActionContainer(actions, args.Member.UniqueName); if (container == null) { container = new DrillActionContainer(args.Member.UniqueName, args.Member.HierarchyUniqueName); container.Action = new MdxExpandAction(args.Member.UniqueName); if (previous == null) { actions.Add(container); } else { previous.Children.Add(container); } } else { // Если по данному элементу уже дедался дриллдаун - то дриллдаун остается в силе. А раскрытие - прокидываем skip_container = container.Action as MdxDrillDownAction; if (skip_container == null) { container.Action = new MdxExpandAction(args.Member.UniqueName); } } // Вложенные действия над элементами из этой же иерархии IList <DrillActionContainer> actionsToHierarchy = History.CurrentHistoryItem.FindDrillActionContainersByHierarchy(actions, args.Member.HierarchyUniqueName); if (actionsToHierarchy != null) { // Все DrillUp и DrillDown операции зануляем если уровень у них глубже foreach (DrillActionContainer action in actionsToHierarchy) { MdxDrillDownAction drillDownAction = action.Action as MdxDrillDownAction; if (drillDownAction != null && drillDownAction.LevelDepth >= args.Member.LevelDepth) { if (skip_container != null && skip_container == drillDownAction) { continue; } action.Action = null; } MdxDrillUpAction drillUpAction = action.Action as MdxDrillUpAction; if (drillUpAction != null && drillUpAction.LevelDepth >= args.Member.LevelDepth) { action.Action = null; } } } } }