2401_84026363 2024-04-21 18:13 采纳率: 85.7%
浏览 17
已结题

DBGridEh怎样能出分组统计?

DBGridEh怎样能出分组统计?
如图红框在记录后边加上数字

img

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-04-21 18:14
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    DBGridEh是一个第三方的Delphi组件,支持分组和统计功能,使用DBGridEh能够高效便捷地实现数据可视化。下面是实现DBGridEh分组统计的步骤:

    1.将DBGridEh设置为可以分组

    将DBGridEh的Options中的dgGrouping选项设为True,表示可以分组。然后设置Grid的Title样式,这里以设置为office2010风格的样式为例:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //设置Grid分组风格
      DBGridEh1.SearchPanel.ButtonStyle := spbsOffice2010Silver;
      DBGridEh1.Title.Font.Style := [fsBold];
      DBGridEh1.Title.Color := clGradientInactiveCaption;
      DBGridEh1.Title.Height := 32;
      DBGridEh1.Title.Flat := True;
      DBGridEh1.Title.SortMarkerStyle := smstNone;
      DBGridEh1.Title.SortMarkerWidth := 0;
      DBGridEh1.Title.VertAlignment := taCenter;
      DBGridEh1.Title.HorzAlignment := taCenter;
      DBGridEh1.Title.EndEllipsis := False;
      DBGridEh1.Title.Active := True;
    end;
    

    2.设置分组信息

    将需要分组的字段按照从左到右的顺序添加到Grid的GroupingColumnIndexes列表中。这里以ProNo为例,只需要将ProNo对应的列的Index添加到GroupingColumnIndexes中即可。

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //设置Grid分组
      DBGridEh1.GroupingColumnIndexes := '0';
    end;
    

    3.设置分组统计信息

    在Grid的FooterRowCount属性中设置Footer的行数,可以是0、1、2或3。然后将需要统计的字段按照从左到右的顺序添加到Grid的FieldsPerFooter中的Cells[]数组中。

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //设置Grid分组统计信息
      DBGridEh1.FooterRowCount := 1;
      DBGridEh1.FieldsPerFooter[0].FieldName := 'ProNo';
      DBGridEh1.FieldsPerFooter[0].Expression := 'COUNT(ProNo)';
    end;
    

    这样就可以在Grid的最下面的一行展示分组统计信息了。需要注意的是,由于Grid的Rows和Columns的Index都是从0开始的,所以在设置分组信息和分组统计信息时需要将ProNo对应的列的Index设置为0。

    完整代码如下:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //设置Grid分组风格
      DBGridEh1.SearchPanel.ButtonStyle := spbsOffice2010Silver;
      DBGridEh1.Title.Font.Style := [fsBold];
      DBGridEh1.Title.Color := clGradientInactiveCaption;
      DBGridEh1.Title.Height := 32;
      DBGridEh1.Title.Flat := True;
      DBGridEh1.Title.SortMarkerStyle := smstNone;
      DBGridEh1.Title.SortMarkerWidth := 0;
      DBGridEh1.Title.VertAlignment := taCenter;
      DBGridEh1.Title.HorzAlignment := taCenter;
      DBGridEh1.Title.EndEllipsis := False;
      DBGridEh1.Title.Active := True;
    
      //设置Grid分组
      DBGridEh1.GroupingColumnIndexes := '0';
    
      //设置Grid分组统计信息
      DBGridEh1.FooterRowCount := 1;
      DBGridEh1.FieldsPerFooter[0].FieldName := 'ProNo';
      DBGridEh1.FieldsPerFooter[0].Expression := 'COUNT(ProNo)';
    end;
    

    需要注意的是,上述代码只能实现对ProNo字段的分组统计,如果需要对其他字段进行分组统计,需要将添加字段到GroupingColumnIndexes和FieldsPerFooter中的Cells[]数组中的Index改为对应的值。

    另外关于 "如图红框在记录后边加上数字" 这个需求,可以在分组统计信息的Expression中设置输出的格式,比如:

    DBGridEh1.FieldsPerFooter[0].Expression := '"共 " + COUNT(ProNo) + " 条记录"';
    

    这样就可以在Grid的最下面的一行的ProNo字段后面输出“共 N 条记录”的信息了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 已采纳回答 5月2日
  • 创建了问题 4月21日