我需要对组摘要字段进行排序。
例如。我在网格中有3列。
步骤1:通过拖动“按区域分组”中的Id列,可以按Id分组。
第2步:在列上加和、计数、平均值。
现在,我想通过单击它来排序和、计数或平均值,这样整个分组就会按照sum排序,比如100,200,300。
请帮帮忙

发布于 2013-12-31 14:46:58
排序顺序由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();
}
}
}请注意,在这个示例中有一些限制,因为我还没有实现任何方法来清除排序的摘要,所以如果需要的话,仍然需要由您来实现。我也没有包括更改排序方向的逻辑,并且使用了字段当前排序的方向,所以如果您也想更新方向,也需要添加这个方向。
https://stackoverflow.com/questions/20682780
复制相似问题