2013-12-19 42 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'上提出的另一个线索相同。 –