2013-12-19 4 views
0

У меня есть требование для сортировки группы.Сортировка резюме группы в Xaml Infragistics grid

Ex. У меня 3 столбца в сетке.

Шаг 1: У меня есть группа по идентификатору, перетащив столбец Идентификатор в группе по области.

Шаг 2: Добавить сумму, количество, среднее по столбцу.

Теперь я хочу сортировать сумму или кол-во или среднее число, нажимая на это, так что вся группировка сортируется по сумме как 100 200 300.

пожалуйста, помогите

enter image description here

ответ

0

Порядок сортировки управляется с помощью GroupByComparer класса FieldSettings, и это может быть достигнуто путем создания пользовательского IComparer для поля, сгруппированных. Обратите внимание, что группировка на самом деле тоже сортировка, поэтому я собираюсь предположить, что вы все еще хотите, чтобы сортировка по умолчанию происходила, когда столбец сначала сгруппирован.

В следующем примере группа по записям может быть отсортирована по одному сводному результату при нажатии. Это было достигнуто с помощью настраиваемого IComparer для групп, сортирует значение тега, если он установлен, и если не установлен возвращается к значению группы по записи:

public class SummarySortComparer : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     GroupByRecord xRecord = x as GroupByRecord; 
     GroupByRecord yRecord = y as GroupByRecord; 
     IComparable xValue = xRecord.Value as IComparable; 
     object yValue = yRecord.Value; 
     if (xRecord.Tag != null) 
     { 
      xValue = xRecord.Tag as IComparable; 
      yValue = yRecord.Tag; 
     }    
     return xValue.CompareTo(yValue); 
    } 
} 

Это устанавливается на сетки, используя следующие:

this.XamDataGrid1.FieldSettings.GroupByComparer = new SummarySortComparer(); 

Используйте PreviewMouseLeftButtonDown сетки, чтобы получить сводку, которая была нажата, если есть был один и установить тег группы по записи, чтобы быть значение этого краткого и обновить вид от сетки:

void XamDataGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    SummaryResultPresenter summaryResultPresenter = 
     Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof (SummaryResultPresenter), false) as 
      SummaryResultPresenter; 
    if (summaryResultPresenter != null) 
    { 
     GroupBySummariesPresenter groupBySummariesPresenter = 
      Utilities.GetAncestorFromType(summaryResultPresenter, 
       typeof(GroupBySummariesPresenter), false) as GroupBySummariesPresenter; 
     if (groupBySummariesPresenter != null) 
     { 
      SummaryResult summaryResult = summaryResultPresenter.SummaryResult; 
      int summaryResultIndex = summaryResult.ParentCollection.IndexOf(summaryResult); 

      foreach (GroupByRecord groupRecord in groupBySummariesPresenter.GroupByRecord.ParentCollection) 
      { 
       groupRecord.Tag = groupRecord.ChildRecords.SummaryResults[summaryResultIndex].Value; 
      } 

      this.XamDataGrid1.Records.RefreshSort(); 
     } 
    } 
} 

Обратите внимание, что в этом примере есть несколько ограничений, в которых я не реализовал какой-либо способ очистить то, что было отсортировано, так что это то, что при желании все равно должно быть реализовано вами. Я также не включал логику для изменения направления сортировки и использовал направление, в котором в настоящее время сортируется поле, поэтому, если вы также хотите обновить направление, это также нужно будет добавить.

+0

Спасибо за ваш ответ, но это сортировка только на одном пути. Мне нужен оба способа. Asc/Desc.Пожалуйста, совет, как получить функциональность. –

+0

Чтобы реализовать возможность изменения сортировки при последующих кликах, вам нужно будет добавить отслеживание, чтобы вы знали, была ли сортировка уже выполнена, и вам нужно будет установить направление сортировки соответствующим образом. Поле «Сортировка и группировка». В разделе «Тематический раздел» подробно описывается, как это сделать: http://help.infragistics.com/doc/WPF/Current/CLR4.0/?page=xamDataGrid_Sorting_And_Grouping_Fields_Programmatically.html Обратите внимание, что реализация, предоставлено только показывает, как повторно использовать вид сетки и знать, что сортировать, вы можете расширить это, чтобы удовлетворить ваши потребности. – alhalama

+0

Привет, alhalama, ваш ответ такой же, как и мой другой поток, который я спросил об Infragistics fourm 'https: // www.infragistics.com/my-account/support-case/CAS-128937-R2K0X6'. –

Смежные вопросы