再使用Gridcontorl的时候页脚的求和平时用起来都是非常方便的。不过有的时候需要普通的求和无法满足我们就可以通过自定义的方式来进行

第一种方法

使用求和的两列数据的总额进行计算毛利率百分比。在绑定数据后就可以直接使用

优点简单方便

缺点只能对总数的汇总计算,如果分组的页脚也有数据是无法通过这种方法来计算

 //自定义求和
gridColumn14.SummaryItem.SetSummary(DevExpress.Data.SummaryItemType.Custom,string.Format("{0:N2}", (Convert.ToDouble(gridView1.Columns["销售金额"].SummaryItem.SummaryValue) - Convert.ToDouble(gridView1.Columns["公司成本"].SummaryItem.SummaryValue)) / Convert.ToDouble(gridView1.Columns["销售金额"].SummaryItem.SummaryValue)*100)+"%");

第二种

不写代码,在设计器中进行设置

首先打开设计器

在设计器中自己添加好分组列和数据列,此处省略。然后添加页脚求和

Group Summary Items。点击添加,并在右侧填写好参数。就可以实现页脚分组求和了

第三种方法

在CustomSummaryCalculate实践中进行计算

优点,可以计算分组汇总,总数汇总。可定义程度高

decimal num1 =0;
decimal num2 =0;
/// <summary>
/// 自定义求和
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
//如果是分组的汇总
if (e.IsGroupSummary)
{
if((e.Item as GridSummaryItem).FieldName == "gridColumn14")
{
//开始计算
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
{
e.TotalValue = 0;
num1 = 0;
num2 = 0;
}
else
//正在计算
if(e.SummaryProcess== DevExpress.Data.CustomSummaryProcess.Calculate)
{
num1 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "销售金额"));
num2 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "公司成本"));
}
else //计算完毕
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)
{
e.TotalValue = string.Format("{0:N2}", (num1 - num2) / num1 * 100) + "%";
}
}
else if ((e.Item as GridSummaryItem).FieldName == "gridColumn15")
{
//开始计算
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
{
e.TotalValue = 0;
num1 = 0;
num2 = 0;
}
else
//正在计算
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)
{
num1 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "销售金额"));
num2 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "分成金额"));
}
else //计算完毕
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)
{
e.TotalValue = string.Format("{0:N2}", num2 / num1 * 100) + "%";
}
}
else if ((e.Item as GridSummaryItem).FieldName == "gridColumn16")
{
//开始计算
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
{
e.TotalValue = 0;
num1 = 0;
num2 = 0;
}
else
//正在计算
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)
{
num1 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "销售金额"));
num2 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "公司利润"));
}
else //计算完毕
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)
{
e.TotalValue = string.Format("{0:N2}", num2 / num1 * 100) + "%";
}
}
}//如果是求和的汇总
else if (e.IsTotalSummary)
{
//总毛利率
if ((e.Item as GridSummaryItem).FieldName == "gridColumn14")
{ //Initialization 加载gridcontrol控件
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
{
e.TotalValue = 0;
num1 = 0;
num2 = 0;
}
else
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)
{ num1 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "销售金额"));
num2 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "公司成本")); }
else if(e.SummaryProcess== DevExpress.Data.CustomSummaryProcess.Finalize)
{
e.TotalValue = string.Format("{0:N2}", (num1 - num2) / num1 * 100) + "%";
}
}
else if((e.Item as GridSummaryItem).FieldName == "gridColumn15")
{
//Initialization 加载gridcontrol控件
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
{
e.TotalValue = 0;
num1 = 0;
num2 = 0;
}
else
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)
{ num1 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "销售金额"));
num2 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "分成金额")); }
else if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)
{
e.TotalValue = string.Format("{0:N2}", num2 / num1 * 100) + "%";
}
}
else if ((e.Item as GridSummaryItem).FieldName == "gridColumn16")
{
//Initialization 加载gridcontrol控件
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
{
e.TotalValue = 0;
num1 = 0;
num2 = 0;
}
else
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)
{ num1 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "销售金额"));
num2 += Convert.ToDecimal(gridView1.GetRowCellDisplayText(e.RowHandle, "公司利润")); }
else if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)
{
e.TotalValue = string.Format("{0:N2}", num2 / num1 * 100) + "%";
}
}
}

【devexpress】Gridcontorl分组时自定义底部页脚求和功能的更多相关文章

  1. datagrid 扩展 页脚 合计功能

    效果图:合计信息展示在页脚中(showFooter:true) code: <!DOCTYPE html> <html> <head> <meta chars ...

  2. spring security采用自定义登录页和退出功能

    更新... 首先采用的是XML配置方式,请先查看  初识Spring security-添加security 在之前的示例中进行代码修改 项目结构如下: 一.修改spring-security.xml ...

  3. CSS + DIV 让页脚始终底部

    一 前言 经常设计页面时用到三层DIV,头DIV与脚DIV一般固定高度,而中间层DIV根据内容的多少,高度不定,我们经常希望但内容很少时,脚DIV保持在底部,当内容很多时,脚DIV被中间内容挤到下面, ...

  4. CSS + DIV 让页脚始终保持在页面底部

    来源:David's Blog     http://www.DavidQiu.com/ 文章链接:http://blog.davidqiu.com/post/2013-06-17/400517539 ...

  5. 【转载自W3CPLUS】如何将页脚固定在页面底部

    该文章转载自:W3CPLUS 大漠的文章 http://www.w3cplus.com/css/css-sticky-foot-at-bottom-of-the-page 以下为全文 作为一个Web的 ...

  6. html 设置页脚div一直在页面底部

    先上代码 <!DOCTYPE HTML> <html lang="en" style="height: 100%; width: 100%;" ...

  7. 将HTML页面页脚固定在页面底部(多种方法实现)

    当一个HTML页面中含有较少的内容时,Web页面的footer部分随着飘上来,处在页面的半腰中间,给视觉效果带来极大的影响,接下来为大家介绍下如何将页脚固定在页面底部,感兴趣的朋友可以了解下 作为一个 ...

  8. bootstrap-table 页脚总计(自定义统计总数)

    •首先给table添加属性: showFooter: footer js代码如下: //初始化bootstrapTableinitBootstrapTable: function () { var o ...

  9. 如何将页脚固定在页面底部,4中方法 转载自:W3CPLUS

    原博客地址:http://www.w3cplus.com/css/css-sticky-foot-at-bottom-of-the-page 作为一个Web的前端攻城师,在制作页面效果时肯定有碰到下面 ...

  10. DIV+CSS:页脚永远保持在页面底部

    页脚永远保持在页面底部 有时候,我们用CSS创建一个高度自适应布局,如何保证页脚(footer)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事.我看过一些利用绝对定位的例子,但总感觉不 ...

随机推荐

  1. MySQL 不同隔离级别,都使用了什么锁?

    大家好,我是树哥. 在上篇文章,我们聊了「MySQL 啥时候会用表锁,啥时候用行锁」这个问题.在文章中,我们还留了一个问题,即:如果查询或更新时的数据特别多,是否从行锁会升级为表锁?此外,还有朋友留言 ...

  2. kubeadm join 命令执行流程

  3. docker bridge 到 k8s pod 跨节点网络通信机制演进

  4. 第2篇----Istio架构概述篇

    Istio的工作机制 Istio的工作机制和架构,分为控制面和数据面两部分.控制面主要包括Pilot.Mixer.Citadel等服务组件:数据面由伴随每个应用程序部署的代理程序Envoy组成,执行针 ...

  5. nginx+gunicorn部署Django项目

    实际采用的nginx.conf文件内容: server { charset utf-8; listen 80; server_name ip; access_log /webapps/project/ ...

  6. 跳转控制语句break

    执行某些循环时,当满足了某个条件,使其提早退出循环,便可以使用break跳出循环 流程图如下: 其他循环均可以以此类推 例子:

  7. 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT10xx系列MCU外接24MHz晶振的作用. 痞子衡之前写过一篇关于时钟引脚的文章 <i.MXRT1xxx系列MCU时 ...

  8. sql语句的组成

    数据定义语言(DDL,Data Definition Language):包括CREATE(创建)ALTER(修改)DROP(删除)等. 数据操纵语言(DML,Data Manipulation La ...

  9. 不安装运行时运行 .NET 程序 - NativeAOT

    大家好,先祝大家国庆快乐.不过大家看到这篇文章的时候估计已经过完国庆了 . 上一篇我们写了如何通过 SelfContained 模式发布程序(不安装运行时运行.NET程序)达到不需要在目标机器上安装 ...

  10. Apache Dolphin Scheduler 3.0.1 发布,对核心及UI相关进行优化

    点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler ​ 版本发布 感谢本次的 Release Manager -- ...