【devexpress】Gridcontorl分组时自定义底部页脚求和功能
再使用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分组时自定义底部页脚求和功能的更多相关文章
- datagrid 扩展 页脚 合计功能
效果图:合计信息展示在页脚中(showFooter:true) code: <!DOCTYPE html> <html> <head> <meta chars ...
- spring security采用自定义登录页和退出功能
更新... 首先采用的是XML配置方式,请先查看 初识Spring security-添加security 在之前的示例中进行代码修改 项目结构如下: 一.修改spring-security.xml ...
- CSS + DIV 让页脚始终底部
一 前言 经常设计页面时用到三层DIV,头DIV与脚DIV一般固定高度,而中间层DIV根据内容的多少,高度不定,我们经常希望但内容很少时,脚DIV保持在底部,当内容很多时,脚DIV被中间内容挤到下面, ...
- CSS + DIV 让页脚始终保持在页面底部
来源:David's Blog http://www.DavidQiu.com/ 文章链接:http://blog.davidqiu.com/post/2013-06-17/400517539 ...
- 【转载自W3CPLUS】如何将页脚固定在页面底部
该文章转载自:W3CPLUS 大漠的文章 http://www.w3cplus.com/css/css-sticky-foot-at-bottom-of-the-page 以下为全文 作为一个Web的 ...
- html 设置页脚div一直在页面底部
先上代码 <!DOCTYPE HTML> <html lang="en" style="height: 100%; width: 100%;" ...
- 将HTML页面页脚固定在页面底部(多种方法实现)
当一个HTML页面中含有较少的内容时,Web页面的footer部分随着飘上来,处在页面的半腰中间,给视觉效果带来极大的影响,接下来为大家介绍下如何将页脚固定在页面底部,感兴趣的朋友可以了解下 作为一个 ...
- bootstrap-table 页脚总计(自定义统计总数)
•首先给table添加属性: showFooter: footer js代码如下: //初始化bootstrapTableinitBootstrapTable: function () { var o ...
- 如何将页脚固定在页面底部,4中方法 转载自:W3CPLUS
原博客地址:http://www.w3cplus.com/css/css-sticky-foot-at-bottom-of-the-page 作为一个Web的前端攻城师,在制作页面效果时肯定有碰到下面 ...
- DIV+CSS:页脚永远保持在页面底部
页脚永远保持在页面底部 有时候,我们用CSS创建一个高度自适应布局,如何保证页脚(footer)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事.我看过一些利用绝对定位的例子,但总感觉不 ...
随机推荐
- Python数据科学手册-机器学习之模型验证
模型验证 model validation 就是在选择 模型 和 超参数 之后.通过对训练数据进行学习.对比模型对 已知 数据的预测值和实际值 的差异. 错误的模型验证方法. 用同一套数据训练 和 评 ...
- 【疑难杂症】关于用pydotplus生成iris.pdf报错问题
在使用刘建平老师博客中DecisionTreeClassifier实例时,遇到报错:InvocationException: GraphViz's executables not found 源代码如 ...
- Elasticsearch:Index生命周期管理入门
如果您要处理时间序列数据,则不想将所有内容连续转储到单个索引中. 取而代之的是,您可以定期将数据滚动到新索引,以防止数据过大而又缓慢又昂贵. 随着索引的老化和查询频率的降低,您可能会将其转移到价格较低 ...
- k8s集群中安装rook-ceph
容器的持久化存储 容器的持久化存储是保存容器存储状态的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件,实际上是保存在远程存储服务器上,或者以分布式的方式保 ...
- python-数据描述与分析(1)
数据描述与分析 在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数 ...
- 初等数论学习笔记 III:数论函数与筛法
初等数论学习笔记 I:同余相关. 初等数论学习笔记 II:分解质因数. 1. 数论函数 本篇笔记所有内容均与数论函数相关.因此充分了解各种数论函数的名称,定义,符号和性质是必要的. 1.1 相关定义 ...
- H3C交换机配置DHCP服务器
dhcp server ip-pool vlan4020 network 10.3.7.0 mask 255.255.255.0 gateway-list 10.3.7.254 dns-list 20 ...
- 聊聊Linux中CPU上下文切换
目录 什么是CPU上下文 CPU上下文切换 上一任务的CPU上下文保存在哪? 进程上下文切换 内核空间和用户空间 top命令查看CPU资源 系统调用 进程上下文切换 和 系统调用的区别? 进程切换的常 ...
- 详解商业智能“前世今生”,“嵌入式BI”到底是如何产生的?
嵌入式分析是使任何应用程序或用户更容易获得数据分析和商业智能的技术. 商业智能是通过分析业务数据辅助决策获取数据背后的 0信息. 商业智能软件和技术包含了报表查询,OLAP,数据挖掘及高级数据分析,最 ...
- Java8新特性之Stream流(含具体案例)
一.概述 Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选.排序.聚合等.元素 ...