2013-12-19 39 views
0

我有要求對組摘要字段進行排序的要求。在Xaml Infragistics網格中對組摘要進行排序

Ex。我在網格中有3列。

第1步:我已通過按分組拖動Id列進行分組。

第2步:在列上添加總和,計數,平均值。

現在我想通過點擊來對整數或者數量進行排序或者平均,這樣整個分組按100,200,300的總和排序。

請幫助

enter image description here

回答

0

的排序順序由FieldSettings類的GroupByComparer控制,這可以實現通過創建被分組字段的自定義的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); 
    } 
} 

這是在設置:這是通過使用自定義的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 請注意,執行I提供的只是顯示如何重新應用網格類型並知道要排序的內容,您可以在此基礎上進行擴展以滿足您的需求。 – alhalama

+0

您好,alhalama您的回覆與我在Infragistics fourm'https:// www.infragistics.com/my-account/support-case/CAS-128937-R2K0X6'上提出的另一個線索相同。 –