public void Initialize(PivotTableSortTypes sortType, SortDescriptor sortDescriptor) { SortType = sortType; m_SortDescriptor = sortDescriptor; // Инициализируем как сортируем if (sortDescriptor == null) { rbNone.IsChecked = true; } else { switch (sortDescriptor.Type) { case SortTypes.Ascending: rbAscending.IsChecked = true; break; case SortTypes.Descending: rbDescending.IsChecked = true; break; default: rbNone.IsChecked = true; break; } } // Инициализируем по чем сортируем switch (sortType) { case PivotTableSortTypes.SortByProperty: SelectProperty(sortDescriptor != null ? sortDescriptor.SortBy : String.Empty); break; case PivotTableSortTypes.SortAxisByMeasure: SelectMeasure(sortDescriptor != null ? sortDescriptor.SortBy : String.Empty); break; case PivotTableSortTypes.SortByValue: InitializeTuple(sortDescriptor as SortByValueDescriptor); break; } }
void ShowSortPropertiesDialog(PivotTableSortTypes sortType, MemberControl member) { ModalDialog dlg; SortPropertiesControl sortControl; if (sortType == PivotTableSortTypes.SortByValue) { // Сортировку по значению делаем отдельным диалогом чтобы не думать о сохранении размеров if (m_SortByValueDialog == null) { m_SortByValueDialog = new ModalDialog() { Width = 500, Height = 400, MinHeight = 250, MinWidth = 180, DialogStyle = ModalDialogStyles.OKCancel }; m_SortByValueDialog.Caption = Localization.SortingSettingsDialog_Caption; m_SortByValueDialog.DialogOk += new EventHandler<DialogResultArgs>(SortProperties_DialogOk); Panel panel1 = GetRootPanel(this); if (panel1 != null) { panel1.Children.Add(m_SortByValueDialog.Dialog.PopUpControl); } } if (m_SortByValueSettingsControl == null) { m_SortByValueSettingsControl = new SortPropertiesControl(); m_SortByValueSettingsControl.CubeName = m_CSDescr != null ? m_CSDescr.CubeName : String.Empty; m_SortByValueSettingsControl.ConnectionID = m_CSDescr != null ? m_CSDescr.Connection.ConnectionID : String.Empty; m_SortByValueSettingsControl.GetOlapDataLoader += new EventHandler<GetIDataLoaderArgs>(CopyControl_GetMetadataLoader); m_SortByValueSettingsControl.LogManager = this.LogManager; m_SortByValueSettingsControl.LoadMeasures += new EventHandler<CustomEventArgs<EventArgs>>(m_SortSettingsControl_LoadMeasures); m_SortByValueDialog.Content = m_SortByValueSettingsControl; } sortControl = m_SortByValueSettingsControl; dlg = m_SortByValueDialog; } else { if (m_SortDialog == null) { m_SortDialog = new ModalDialog() { Width = 400, Height = 250, MinHeight = 215, MinWidth = 180, DialogStyle = ModalDialogStyles.OKCancel }; m_SortDialog.Caption = Localization.SortingSettingsDialog_Caption; m_SortDialog.DialogOk += new EventHandler<DialogResultArgs>(SortProperties_DialogOk); Panel panel1 = GetRootPanel(this); if (panel1 != null) { panel1.Children.Add(m_SortDialog.Dialog.PopUpControl); } } if (m_SortSettingsControl == null) { m_SortSettingsControl = new SortPropertiesControl(); m_SortSettingsControl.CubeName = m_CSDescr != null ? m_CSDescr.CubeName : String.Empty; m_SortSettingsControl.ConnectionID = m_CSDescr != null ? m_CSDescr.Connection.ConnectionID : String.Empty; m_SortSettingsControl.GetOlapDataLoader += new EventHandler<GetIDataLoaderArgs>(CopyControl_GetMetadataLoader); m_SortSettingsControl.LogManager = this.LogManager; m_SortSettingsControl.LoadMeasures += new EventHandler<CustomEventArgs<EventArgs>>(m_SortSettingsControl_LoadMeasures); m_SortDialog.Content = m_SortSettingsControl; } sortControl = m_SortSettingsControl; dlg = m_SortDialog; } if (dlg == null || sortControl == null) return; dlg.Tag = sortControl; sortControl.Tag = member; SortDescriptor sort = null; switch (sortType) { case PivotTableSortTypes.SortByProperty: if (m_CellSetProvider != null && member != null && member.Member != null) { sort = GetAxisPropertySort(member); } break; case PivotTableSortTypes.SortAxisByMeasure: sort = GetAxisByMeasureSort(member); break; case PivotTableSortTypes.SortByValue: // Получаем сортировку для противоположной оси. Если это сортировка по значению, то проверяем чтобы это была сортировка для данного элемента. Если нет, то создается новый дескриптор if (member is ColumnMemberControl || member is RowMemberControl) { var value_sort = GetAxisSort(member is ColumnMemberControl ? AreaType.RowsArea : AreaType.ColumnsArea) as SortByValueDescriptor; if (value_sort != null && member != null && member.Member != null && value_sort.CompareByTuple(member.Member.GetAxisTuple())) { sort = value_sort; } } if (sort == null) { sort = new SortByValueDescriptor(); if (member != null && member.Member != null) { (sort as SortByValueDescriptor).Tuple = member.Member.GetAxisTuple(); } } break; } sortControl.Initialize(sortType, sort); ShowDialog(dlg); }