【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)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事.我看过一些利用绝对定位的例子,但总感觉不 ...
随机推荐
- 当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花
开心一刻 晚上,女儿眼噙泪水躺在床上 女儿:你口口声声说爱我,说陪我,却天天想着骗我零花钱,你是我亲爹吗? 我:你想知道真相 女儿:想! 我:那你先给爸爸两百块钱! 环境准备 MySQL 不同版本 利 ...
- MySQL数据备份 mysqldump 详解
MySQL数据备份流程 1 打开cmd窗口 通过命令进行数据备份与恢复: 需要在Windows的命令行窗口中进行: l 开始菜单,在运行中输入cmd回车: l 或者win+R,然后输入cmd回车,即可 ...
- Java SE final关键字
final关键字 final可以修饰类.属性.方法和局部变量 如下情况,可以使用final 当不希望类被继承时,可以用final修饰 当不希望父类的某个方法被子类覆盖/重写(override)时,可以 ...
- Python数据科学手册-机器学习:朴素贝叶斯分类
朴素贝叶斯模型 朴素贝叶斯模型是一组非常简单快速的分类方法,通常适用于维度非常高的数据集.因为运行速度快,可调参数少.是一个快速粗糙的分类基本方案. naive Bayes classifiers 贝 ...
- 【学习笔记】GBDT算法和XGBoost
前言 这一篇内容我学了足足有五个小时,不仅仅是因为内容难以理解, 更是因为前面CART和提升树的概念和算法本质没有深刻理解,基本功不够就总是导致自己的理解会相互在脑子里打架,现在再回过头来,打算好好总 ...
- containerd使用
Docker CLI 工具提供了需要增强用户体验的功能,containerd 同样也提供一个对应的 CLI 工具:ctr,不过 ctr 的功能没有 docker 完善,但是关于镜像和容器的基本功能都是 ...
- 7.prometheus监控多个MySQL实例
mysqld_exporter集中部署 集中部署,就是说我们将所有的mysqld_exporter部署在同一台服务器上,在这台服务器上对mysqld_exporter进行统一的管理,下面介绍一下集中部 ...
- 设置HTTP请求自动跳转HTTPS
第一种方式,分两种情况: 第一种情况:修改Nginx安装目录/conf/nginx.conf文件 server { listen 80; server_name localhost; #将localh ...
- 洛谷P4011 【网络流24题】 孤岛营救问题 (BFS+状压)
一道妙题啊......(不知道为什么这道题的标签是网络流,不需要用网络流啊) 如果没有门和钥匙,连边(边权为1)求最短路就行了. 但是有这两个因素的限制,我们采用分层建图的思想,一共2p层,每层对应持 ...
- 11.MongoDB系列之连接副本集
1. Python连接副本集 from pymongo import MongoClient from bson.codec_options import CodecOptions from retr ...