Wpf Xaml基础设施网格中的排序组摘要

Wpf Xaml基础设施网格中的排序组摘要,wpf,infragistics,Wpf,Infragistics,我需要对组摘要字段进行排序 我在网格中有3列 步骤1:通过拖动GroupByArea中的Id列,我拥有了GroupByID 步骤2:在列上添加总和、计数、平均值 现在我想通过点击它来排序sum、count或average,这样整个分组就可以按sum排序,比如100200300 请帮忙 排序顺序由FieldSettings类的GroupByComparer控制,这可以通过为分组的字段创建自定义IComparer来实现。请注意,分组实际上也是一种排序,因此我假设您仍然希望在第一次分组列时使用默认排序

我需要对组摘要字段进行排序

我在网格中有3列

步骤1:通过拖动GroupByArea中的Id列,我拥有了GroupByID

步骤2:在列上添加总和、计数、平均值

现在我想通过点击它来排序sum、count或average,这样整个分组就可以按sum排序,比如100200300

请帮忙


排序顺序由FieldSettings类的GroupByComparer控制,这可以通过为分组的字段创建自定义IComparer来实现。请注意,分组实际上也是一种排序,因此我假设您仍然希望在第一次分组列时使用默认排序

在下面的示例中,单击group by记录时,可以按单个摘要结果对其进行排序。这是通过为组使用自定义IComparer来实现的,如果设置了标记,则按标记的值进行排序;如果未设置,则返回到group by记录的值:

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获取单击的摘要(如果有),并将group by记录的标记设置为该摘要的值,并刷新网格的排序:

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

请注意,本例中存在一些限制,因为我没有实现任何方法来明确排序的摘要,因此如果需要,您仍然需要实现这些内容。我也没有包括更改排序方向的逻辑,并使用了字段当前排序的方向,因此如果您还想更新方向,也需要添加此项。

感谢您的回复,但这只是一种排序方式,实际上我需要双向Asc/Desc。请建议如何获取功能。要实现如果要在后续单击时更改排序,则需要添加跟踪,以便知道排序是否已完成,然后需要适当设置排序方向。按编程方式对字段进行排序和分组主题详细介绍了如何执行此操作:请注意,我提供的实现仅显示了如何重新应用网格排序,以及如何知道排序依据,你可以在此基础上进行扩展以满足你的需要。你好,alhalama,你的回答与我在Infrastics fourm
https://www.infragistics.com/my-account/support-case/CAS-128937-R2K0X6