DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 30
在线用户: 14
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 beginer (初学者) ★☆☆☆☆ -
盒子活跃会员
2017/6/20 21:40:18
标题:
怎样在dbgrideh生成的汇总行中加上一列比值,如进度或百分比等 浏览:1571
加入我的收藏
楼主: 如图:以DBGridEh的DataGrouping为例,A列和B列可以通过设置,在汇总栏上显示汇总数,现在想在汇总栏的C列上显示一个比值,请教应该在哪个事件中写?怎么写?多谢了。
此帖子包含附件:
PNG 图像
大小:28.7K
----------------------------------------------
新手,想得到您的帮助!
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2017/6/21 17:11:09
1楼: 在表格的SumList事件中处理
DBGridEh1.SumList.SumListChanged := ShopSumListSumListChanged;
事件代码:procedure Tys2010_Frm.ShopSumListSumListChanged(Sender: TObject);
var
  tmpSum: TDBSumCollection;
begin
  tmpSum := TDBSumListProducer(Sender).SumCollection;
  //销售提升
  if tmpSum.Items[0].SumValue <> 0 then
    tmpSum.Items[2].SumValue := tmpSum.Items[1].SumValue * 100 / tmpSum.Items[0].SumValue - 100;
end;
----------------------------------------------
Delphi爱好者。
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2017/6/21 17:15:26
2楼: 我给的代码是表格最下面的合计,至于DataGrouping的合计可能不是这样,可以参照下,抛砖引玉。
----------------------------------------------
Delphi爱好者。
作者:
男 beginer (初学者) ★☆☆☆☆ -
盒子活跃会员
2017/6/21 21:21:34
3楼: 表格最下面合计栏的我懂搞,就是想要分类汇总栏上的。谢谢你!
----------------------------------------------
新手,想得到您的帮助!
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2017/6/23 10:23:27
4楼:   1. Active - True;
2. GroupPanelVisible - True; 注意如果只设置这两项,则运行时,它会显示一个 Panel 在 DBGrid 的顶上,并有英文提示,拖一个字段到这里,它会自动根据这个字段进行分组显示。
3. GroupLevels 点开,在弹出来的窗口里面,增加一条,类似增加一个字段一样的操作。
3.1. 在增加的这一条的属性里面,选择 ColumnName,下拉开,如果 DBGridEh1 已经在设计期加了静态字段,这里就会看到几个字段,挑选需要用来作为分组依据的字段。DBGridEh1 将会用这个字段来进行分组。
4. 分组统计:Footers 点开,弹出一个窗口,类似字段编辑器。增加一条。
4.1. 选中增加的一条,属性里面选择 ColumnItems,会弹出窗口,窗口里面是前述的三个字段(必须是设计期已经为 DBGridEh1 增加了静态字段)。
4.2. 选择 ShuLiang 字段,属性里面的 ValueType 下拉选择 gfvSumEh。就会在分组的 Footer 里面显示这一组的合计数字(小计)。
5. DefaultStateExpanded - True 表格会加载后自动展开。否则加载后,是收缩的,只显示组,不显示组里面的记录。

以上方法是设置分组合计。
但是不会显示比值,通过事件DBGridEh1DataGroupFooterToDisplayText来修正。
1、先定义一个单元内的变量
cb, ss: Currency;

procedure TForm1.DBGridEh1DataGroupFooterToDisplayText(
  Grid: TCustomDBGridEh; Column: TColumnEh;
  GroupFooter: TGridDataGroupFooterEh;
  FooterColumnItem: TGridDataGroupFooterColumnItemEh; var AValue: Variant;
  var DisplayValue: String; var Processed: Boolean);
var
  I: Integer;
  tmp: string;
begin
  //修正分组合计的值
  if Column.FieldName = 'DML' then
  begin
    if ss <> 0 then
    begin
      DisplayValue := '毛利率:' + FormatFloat('##.##%', cb/ss * 100 );
      Processed := True; //告诉系统,按我修正后的内容显示
    end;
  end
  else if Column.FieldName = 'DMONEY_IN' then
    cb := AValue //记录变量值
  else if Column.FieldName = 'DMONEY_SS' then
    ss := AValue
end;
----------------------------------------------
Delphi爱好者。
作者:
男 beginer (初学者) ★☆☆☆☆ -
盒子活跃会员
2017/6/24 10:08:49
5楼: 鼓掌,谢谢啊,我试试
----------------------------------------------
新手,想得到您的帮助!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS