开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 2665|回复: 0

DevExpress GridControl 实现自定义汇总

[复制链接]

0

精华

206

贡献

76

赞扬

帖子
96
软币
930
在线时间
108 小时
注册时间
2013-9-1
发表于 2017-8-26 14:24:36 | 显示全部楼层 |阅读模式
本帖最后由 ifu25 于 2017-8-26 14:26 编辑

### 注册事件
[C#] 纯文本查看 复制代码
gvDetail.CustomSummaryCalculate += GvDetail_CustomSummaryCalculate; //实现自定义汇总

### 设置汇总列
[C#] 纯文本查看 复制代码
#region 自定义汇总

gvDetail.OptionsView.ShowFooter = true;
gvDetail.Columns["Quantity"].SummaryItem.SummaryType = SummaryItemType.Custom; //到这里会触发事件
gvDetail.Columns["Quantity"].SummaryItem.DisplayFormat = "特殊合计:{0}";
gvDetail.UpdateSummary(); //因为先绑定了数据又设置了汇总,可以手动触发一次计算

#endregion

### 汇总事件(方法一):直接用数据源dt计算
[C#] 纯文本查看 复制代码
/// <summary>
/// 自定义汇总
/// </summary>
private void GvDetail_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e)
{
    //只有当GridSummaryItem的类型为Custom时,才会触发事件
    GridSummaryItem gridSummaryItem = e.Item as GridSummaryItem;
    if (gridSummaryItem.FieldName == "Quantity")
    {
    
        //第1阶段:开始
        if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start){
            e.TotalValueReady = true; //设置此项可直接进入Finalize,跳过耗时的Calculate
        }

        //第2阶段:计算中,会遍历所有行
        if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)
        {
            //因为在Start设置了e.TotalValueReady = true; 所以这里不会执行
        }
    
    
        //在Finalize进行赋值,也就是循环到最后一行时通过对背后的数据源进行计算一次性赋值
        if (e.SummaryProcess == CustomSummaryProcess.Finalize)
        {
            //取出数据源,可能已过滤
            var filteredRows = gvDetail.DataController.GetAllFilteredAndSortedRows();

            //通过Linq进行筛选计算
            var query = from r in filteredRows.Cast<DataRowView>()
                        where !r.Row["ProductFullName"].ToString().Contains("日薪") && !r.Row["ProductFullName"].ToString().Contains("QT-") //日薪和QT不统计
                        select r;

            var result = query.Sum(c => float.Parse(c.Row["Quantity"] + ""));

            e.TotalValue = result;
        }
    }
}


### 汇总事件(方法二):逐行遍历累计
即在上面代码事件中有三个阶段,在第二阶段 DevExpress.Data.CustomSummaryProcess.Calculate会遍历Grid所有行,行索引在e.RowHandle,所以在里面自己写计算就行了。


回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-26 23:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表