起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 2260|回复: 6

DataGrid 分组

[复制链接]
发表于 2004-4-6 15:44:51 | 显示全部楼层 |阅读模式
DataGrid本身支持分组,但通过代码也可以使用:

如果在信息层写:
   DataGrid.ColumnByName('DataGridBE1').GroupIndex := 0;
   DataGrid.ColumnByName('DataGridBE2').GroupIndex := 1;

如果在功能层写:
  CSJustCellDYGZDSX.TSJWGDDY(DocViewCSJustCellDYGZDSX_SJWGDDY.Doc).DataGrid.ColumnByName('DataGridBE1').GroupIndex := 0;
  CSJustCellDYGZDSX.TSJWGDDY(DocViewCSJustCellDYGZDSX_SJWGDDY.Doc).DataGrid.ColumnByName('DataGridBE2').GroupIndex := 1;

功能层取消:(信息层取消类似)
  CSJustCellDYGZDSX.TSJWGDDY(DocViewCSJustCellDYGZDSX_SJWGDDY.Doc).DataGrid.ColumnByName('DataGridBE1').GroupIndex := -1;
  CSJustCellDYGZDSX.TSJWGDDY(DocViewCSJustCellDYGZDSX_SJWGDDY.Doc).DataGrid.ColumnByName('DataGridBE2').GroupIndex := -1;

说明:

   -1  取消分组  
   0   第一分组
   1   第二分组
   2   第三分组 ,依次类推
回复

使用道具 举报

 楼主| 发表于 2004-8-30 10:36:26 | 显示全部楼层

DataGrid 分组

DataGrid 分组实现步骤:
1、在业务信息层中,打开需要设置分组的DataGrid 文档,
2、选中 ShowGropPanel 属性,

这样用户运行后,可以自由拖动需要分组的字段。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-30 10:46:41 | 显示全部楼层

实现默认按某个字段分组

如果想实现默认有分组,那么需要在数据上设置了,步骤:
1、选中需要设置的数据集,
2、设置数据集的“分组-分组字段”(Group -KeyFieldNames)就可以。

另外,如果是实现日期时间型字段进行分组,那么需要:在“数据字典”层,定义“日期时间”型字段的“数据类型参数 - SubType”设置为:stDate 才能实现效果
回复 支持 反对

使用道具 举报

发表于 2004-9-18 10:20:49 | 显示全部楼层
定义“日期时间”型字段的“数据类型参数 - SubType”设置为:stDate 才能实现效果,触发条件是在Post的时候,因此以前的数据库中的数据是不能进行截取的,因此想实现正确的分组需要清空数据集的以前的数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-21 10:37:07 | 显示全部楼层

如何实现DataGrid分组不显示字段的名称、修改字段大小和背景等

1、分组不显示字段的名称,参考代码示例如下:

procedure TMainForm.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn;
  ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer;
  AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
begin
  if ANode.HasChildren then
  begin
    AColor := $0F0E0F0;
    AFont.Size := AFont.Size + 2;
    AText := StringUtils.Copy(AText, StringUtils.Pos(':', AText) + 2, 10);
  end;
end;

{ 说明,例如对于:开户单位 : XXX,就是从冒号后的空格开始Copy,直至结束,一般Copy的最后一个参数给个足够长的整数就行,不用自己算了,Copy会自己处理的,这里首先根据Pos找到冒号的位置,由于冒号后有个空格,所以+2。效果见附件图片}


2、字体大小和背景色,参考代码如下:

procedure TMainForm.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn;
  ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer;
  AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
begin
  if ANode.HasChildren and not ANode.Selected then
  begin
    AColor := $0F0E0F0;
    AFont.Size := AFont.Size + 4;
    //AText := 'Test';
  end;
end;

图1.jpg

30.03 KB, 下载次数: 1048

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-28 10:22:16 | 显示全部楼层

代码实现分组汇总

参考代码如下:
DataGrid1.ColumnByName('DataGrid1FieldA').GroupIndex := 0;//对FieldA分组,取消分组GroupIndex取值 -1
DataGrid1.SummaryGroups.Add;
DataGrid1.SummaryGroups[0].DefaultGroup := True;//设置默认统计组
DataGrid1.SummaryGroups[0].SummaryItems.Add;
DataGrid1.SummaryGroups[0].SummaryItems[0].ColumnName := 'DataGrid1Field1';//对Field1统计并显示在组尾
DataGrid1.SummaryGroups[0].SummaryItems[0].SummaryType := TSummaryType.cstSum;//设置统计类型
DataGrid1.SummaryGroups[0].SummaryItems[0].SummaryField := 'Field1';//设置统计字段
DataGrid1.SummaryGroups[0].SummaryItems[0].SummaryFormat := '(合计值=0.00)';//设置统计显示格式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-28 10:24:05 | 显示全部楼层

在DataGrid中显示按某字段分组后的合计值

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 18:45 , Processed in 0.048294 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表