2013-12-19 3 views
0

그룹 요약 필드를 정렬해야합니다.Xaml Infragistics 그리드에서 요약 그룹 요약

Ex. 그리드에 3 개의 열이 있습니다.

1 단계 : 그룹별로 ID 열을 끌어 ID별로 그룹화했습니다.

2 단계 : 합계, 개수, 평균을 열에 추가합니다.

이제 총계를 정렬하거나 개수 또는 평균을 클릭하여 전체 그룹화가 100,200,300과 같은 합계로 정렬되도록하고 싶습니다.

그룹화 필드의 사용자 지정 IComparer를 만들어

enter image description here

답변

0

정렬 순서가 FieldSettings 클래스의 GroupByComparer에 의해 제어되며,이 수행 할 수 있습니다 도와주세요. 그룹화는 사실 일종의 정렬이기 때문에 컬럼이 처음 그룹화 될 때 디폴트 정렬이 여전히 발생하기를 원한다고 가정합니다.

다음 예제에서 그룹 별 레코드는 클릭 할 때 단일 요약 결과로 정렬 할 수 있습니다. 이 작업은 설정되어

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); 
    } 
} 

: 이것은이 설정되어있는 경우 설정되어 있지 않은 경우 태그의 값으로 정렬 그룹에 대한 사용자 지정 IComparer를 사용하여 수행 하였다는 기록에 의해 다시 그룹의 값 떨어진다 그리드 사용하여 다음 :

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.Please 기능을 얻는 방법에 대한 조언이 필요합니다. –

+0

후속 클릭에 대해 정렬을 변경하는 기능을 구현하려면 정렬을 이미 완료했는지 알 수 있도록 추적을 추가해야하며 정렬 방향을 적절히 설정해야합니다. 프로그래밍 방식으로 필드 정렬 및 그룹화에 대한 자세한 내용은 다음을 참조하십시오. http://help.infragistics.com/doc/WPF/Current/CLR4.0/?page=xamDataGrid_Sorting_And_Grouping_Fields_Programmatically.html 제공되는 것은 그리드의 종류를 다시 적용하고 정렬 기준을 알 수있는 방법을 보여주는 것 뿐이며 필요에 맞게 확장 할 수 있습니다. – alhalama

+0

안녕하세요 alhalama 귀하의 회신은 Infragistics 4m https : // www.infragistics.com/my-account/support-case/CAS-128937-R2K0X6에 요청한 다른 내 스레드와 같습니다. –