DELPHI的web编程中unidbgrid的求和footer行

因为自己找到的一些案例中,unidbgrid对某些列求和后,将求和结果一般放在最后一行。如果行数比较多或者有多页的情况,想知道汇总结果还是挺不方便。我一度怀疑unigui的设计者怎么连基本的使用习惯都不能兼顾,万般吐槽。

其实关键的设置如下,align设置为tobottom则自动将汇总行作为footer列示在表格的底部。不是人家设计的不好,要怪是自己知识不全面。

求和还有一个事件,需要对表格内部的列数据进行循环处理,得到列求和或列统计的结果。我设计了一个通用的求和事件

procedure TUniFramYwymain.UniDBGrid2ColumnSummaryResult(Column: TUniDBGridColumn;
  GroupFieldValue: Variant; Attribs: TUniCellAttribs; var Result: string);
var
  bk1: TBookmark;
  f: Double;
  s1: TStringList;
  ss: string;
begin
  inherited;
  bk1 := UniDBGrid2.DataSource.DataSet.GetBookmark;
  UniDBGrid2.DataSource.DataSet.DisableControls;
  ss := '合同金额,' + //
    '已开发票,已收款,审批金额,已付款,已收发票,' + //
    '可用金额,欠进项,欠发票';
  s1 := Splitstring(ss, ',');      //'已开发票,已收款,校对收款,审批金额,已付款,校对付款,已收发票,可用金额,欠进项,欠发票'
  if s1.indexof(Column.FieldName) >= 0 then
  begin
    f := 0;
    Column.Field.DataSet.First;
    while not Column.Field.DataSet.Eof do
    begin
      f := f + Column.Field.Value;
      Column.Field.DataSet.Next;
    end;
    Result := FormatFloat('#,##0.00', f);
    Attribs.font.Style := [fsBold];
    Attribs.Font.Color := clNavy;

  end;
  UniDBGrid2.DataSource.DataSet.GotoBookmark(bk1);
  UniDBGrid2.DataSource.DataSet.EnableControls;

end;

只需要将需要自己unidbgrid中需求和的数据列字段名列表放到ss变量中。

这里还要一个要点,如果先不保存设置tbookmark再恢复,将出现页码跳转时页面显示不正确的错误。这一点也是经过多次测试后才找出的问题所在。最后效果如图

综上所述,unidbgrid的求和设置有两个大坑,分别是:

1、align设置为tobottom才能显示 footer类似的求和统计栏

2、在unidbgrid的ColumnSummaryResult事件中,一定要先保存数据表的游标,在循环执行完再恢复现场,这样在多页的状态下才能保证正常的跳转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值