首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xaml非脆弱网格中的排序组摘要

问Xaml非脆弱网格中的排序组摘要
EN

Stack Overflow用户
提问于 2013-12-19 13:15:52
回答 1查看 1.3K关注 0票数 0

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

例如。我在网格中有3列。

步骤1:通过拖动“按区域分组”中的Id列,可以按Id分组。

第2步:在列上加和、计数、平均值。

现在,我想通过单击它来排序和、计数或平均值,这样整个分组就会按照sum排序,比如100,200,300。

请帮帮忙

​

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 14:46:58

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

在下面的示例中,按记录组可以在单击单个汇总结果时进行排序。这是通过对组使用自定义IComparer来实现的,这些组根据标记的值进行排序,如果设置了标记,而如果没有设置,则通过记录返回到组的值:

代码语言:javascript
复制
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);
    }
}

这是在网格上使用以下方法设置的:

代码语言:javascript
复制
this.XamDataGrid1.FieldSettings.GroupByComparer = new SummarySortComparer();

使用网格的PreviewMouseLeftButtonDown获取单击的摘要(如果有),并根据记录将组标记设置为该摘要的值,并刷新网格的类型:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20682780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档