protected void Raise_PerformMemberAction(MemberActionEventArgs args)
 {
     MemberActionEventHandler handler = this.OnPerformMemberAction;
     if (handler != null)
     {
         handler(this, args);
     }
 }
 protected void Raise_ExecuteMemberAction(MemberActionEventArgs args)
 {
     MemberActionEventHandler handler = this.ExecuteMemberAction;
     if (handler != null)
     {
         handler(this, args);
     }
 }
        protected void OnExecuteMemberAction(object sender, MemberActionEventArgs args)
        {
            // Если ячейка с фокусом находилось не в строке или не в колонке, для которой производится данная операция,
            // то фокус устанавливаем на первую ВИДИМУЮ (чтобы сохранить скроллы) ячейку в данной колонке или строке
            if (FocusedCellView != null)
            {
                int cell_column_indx = -1;
                int cell_row_indx = -1;
                if (FocusedCell != null)
                {
                    // Получаем позицию ячейки с фокусом в гриде
                    cell_column_indx = Grid.GetColumn(FocusedCell);
                    cell_row_indx = Grid.GetRow(FocusedCell);
                }
                else
                {
                    cell_column_indx = CellsArea_BeginColumnIndex;
                    cell_row_indx = CellsArea_BeginRowIndex;
                }

                MemberControl member_Control = sender as MemberControl;
                if (member_Control != null)
                {
                    // Получаем позицию данного контрола в гриде
                    int member_column_indx = Grid.GetColumn(member_Control);
                    int member_row_indx = Grid.GetRow(member_Control);

                    if (cell_column_indx > -1 &&
                        cell_row_indx > -1 &&
                        member_column_indx > -1 &&
                        member_row_indx > -1 &&
                        cell_column_indx != member_column_indx &&
                        cell_row_indx != member_row_indx)
                    {
                        if (member_Control is ColumnMemberControl)
                        {
                            CellControl new_focused = m_CellControls_Cache[member_column_indx - CellsArea_BeginColumnIndex, 0];
                            if (new_focused != null)
                                FocusedCellView = new_focused.Cell;
                            else
                                FocusedCellView = null;
                        }
                        if (member_Control is RowMemberControl)
                        {
                            CellControl new_focused = m_CellControls_Cache[0, member_row_indx - CellsArea_BeginRowIndex];
                            if (new_focused != null)
                                FocusedCellView = new_focused.Cell;
                            else
                                FocusedCellView = null;
                        }
                    }
                }
            }

            Raise_ExecuteMemberAction(args);
        }
		void PivotGrid_ExecuteMemberAction(object sender, MemberActionEventArgs args)
		{
			// Определяем нужно ли выполнить экшен по умолчанию
			if (args.Action == MemberActionType.Default)
			{
				var MemberAction = (ColumnTitleClickBehavior)(int)DefaultMemberAction;
				if (args.Axis == 0)
					if (this.ColumnTitleClickBehavior != ColumnTitleClickBehavior.SameAsRows)
					{
						MemberAction = this.ColumnTitleClickBehavior;
					}

				switch (MemberAction)
				{
					case ColumnTitleClickBehavior.None:
						return;
					case ColumnTitleClickBehavior.DrillDown:
						args.Action = MemberActionType.DrillDown;
						break;
					case ColumnTitleClickBehavior.ExpandCollapse:
						if (args.Member != null && args.Member.ChildCount > 0 && !args.Member.IsCalculated)
						{
							args.Action = MemberActionType.Expand;
							if (args.Member.DrilledDown)
								args.Action = MemberActionType.Collapse;
							break;
						}
						return;
					case ColumnTitleClickBehavior.SortByValue:
						if (args.Member.Children.Count > 0)
							return;

						args.Action = MemberActionType.SortByValue;
						break;

					case ColumnTitleClickBehavior.SortByProperty:
						if (args.Member != null && (args.Axis == 0 || args.Axis == 1))
						{
							SortDescriptor new_descr = new SortDescriptor();
							new_descr.SortBy = "Caption";
							new_descr.Type = SortTypes.Ascending;
							SortDescriptor descr = PivotGrid.GetAxisPropertySort(args.Axis, args.Member);
							if (descr != null)
							{
								if (!String.IsNullOrEmpty(descr.SortBy))
								{
									new_descr.SortBy = descr.SortBy;
								}
								switch (descr.Type)
								{
									case SortTypes.None:
										new_descr.Type = SortTypes.Ascending;
										break;
									case SortTypes.Ascending:
										new_descr.Type = SortTypes.Descending;
										break;
									case SortTypes.Descending:
										new_descr.Type = SortTypes.None;
										break;
								}
							}

							m_CellSetProvider.Sort(args.Axis, args.Member.HierarchyUniqueName, new_descr);

							try
							{
								IsWaiting = true;
								PivotGrid.Initialize(m_CellSetProvider);
							}
							finally
							{
								IsWaiting = false;
							}
						}
						return;
				}
			}

			if (args.Axis == 0 || args.Axis == 1)
			{
				ExportSizeInfo();
				PerformMemberAction(args);
			}
		}
		protected virtual void PerformMemberAction(MemberActionEventArgs e)
		{
			if (e.Action == MemberActionType.Collapse ||
					e.Action == MemberActionType.Expand ||
					e.Action == MemberActionType.DrillDown
					|| e.Action == MemberActionType.SortByValue
				//                 || e.Action == MemberActionType.DrillUp
					)
			{
				List<MemberInfo> full_tuple = e.Member.GetAncestors(true);

				PerformMemberActionArgs args = CommandHelper.CreatePerformMemberActionArgs(
						e.Member, e.Axis, e.Action, full_tuple);

				if (DataManager != null)
				{
					String query = DataManager.PerformMemberAction(args);
					// query=generateQuery(e);
					if (!String.IsNullOrEmpty(query))
					{
						MdxQueryArgs query_args = CommandHelper.CreateMdxQueryArgs(Connection, query);
						ExecuteMemberAction(query_args, args);
					}
				}
			}
		}
 protected void Raise_DrillDownMember(MemberActionEventArgs args)
 {
     MemberActionEventHandler handler = this.DrillDownMember;
     if (handler != null)
     {
         handler(this, args);
     }
 }
        void PivotGrid_DrillDownMember(object sender, MemberActionEventArgs args)
        {
            //NEW!!! Если в кэше есть изменения, то нужно спросить об их сохранении
            //if (UseChangesCashe && PivotGrid.LocalChanges.CellChanges.Count > 0)
            //{
            //    MessageBox.Show(Localization.PivotGrid_SaveCachedChanges, Localization.MessageBox_Warning, MessageBoxButton.OK);
            //    //PopUpQuestionDialog dlg = SaveChangesDlg;
            //    //dlg.DialogClosed += new EventHandler<Ranet.AgOlap.Controls.Forms.DialogResultArgs>(ColumnsControl_SaveChanges_DialogClosed);
            //    //dlg.Tag = args;
            //    //dlg.Show();
            //    return;
            //}

            if (args.Axis == 0 || args.Axis == 1)
            {
                ExportSizeInfo();
                PerformMemberAction(args);
            }
        }
        protected virtual void PerformMemberAction(MemberActionEventArgs e)
        {
            List<MemberInfo> full_tuple = new List<MemberInfo>();
            e.Member.CollectAncestors(full_tuple, true);

            PerformMemberActionArgs args = CommandHelper.CreatePerformMemberActionArgs(
                e.Member, e.Axis, e.Action, full_tuple);

            if (DataManager != null)
            {
                String query = DataManager.PerformMemberAction(args);
                if (!String.IsNullOrEmpty(query))
                {
                    MdxQueryArgs query_args = CommandHelper.CreateMdxQueryArgs(Connection, query);
                    ExecuteMemberAction(query_args, args);
                }
            }
        }
 protected override void PerformMemberAction(MemberActionEventArgs e)
 {
     base.PerformMemberAction(e);
 }