zoukankan      html  css  js  c++  java
  • DBGridEh的data group的使用(转)

    文章来源:http://blog.csdn.net/ghs79/article/details/73614139

    一、设置数据关系

    1、要利用DBGridEh的datagroup功能,必须是关联数据集MemTableEh1;不可是传统的ADOQuery,Clientdataset等。

    2、好在MemTableEh1有自动从其它数据集中取数据的功能,设置好对应关系,即可完成数据的转换。我是从ADO取的数据,所以关系如下。

        ADOQuery1.connection := ADOconnnect1;

    //设置数据转换关系

    SQLDataDriverEh1.providerdataset := ADOQuery1;

        MemTableEh1.datadriver := SQLDataDriverEh1;

    MemTableEh1.active := True;//到此可以取到数据。

    //下面设置数据显示

    DBGridEh1.datasource := datasource1;

    DataSource1.dataset := MemTableEh1;

    二、设置datagroup显示

    都是在设计期,在 Object Inspector 里面,针对 DbGridEh1 的 DataGrouping 属性,拉开后,设置里面的属性:

    1. Active - True;
    2. GroupPanelVisible - True; 注意如果只设置这两项,则运行时,它会显示一个 Panel 在 DBGrid 的顶上,并有英文提示,拖一个字段到这里,它会自动根据这个字段进行分组显示。
    3. GroupLevels 点开,在弹出来的窗口里面,增加一条,类似增加一个字段一样的操作。
    3.1. 在增加的这一条的属性里面,选择 ColumnName,下拉开,如果 DBGridEh1 已经在设计期加了静态字段,这里就会看到几个字段,挑选需要用来作为分组依据的字段。DBGridEh1 将会用这个字段来进行分组。
    4. 分组统计:Footers 点开,弹出一个窗口,类似字段编辑器。增加一条。
    4.1. 选中增加的一条,属性里面选择 ColumnItems,会弹出窗口,窗口里面是前述的三个字段(必须是设计期已经为 DBGridEh1 增加了静态字段)。
    4.2. 选择 需要合计的 字段,属性里面的 ValueType 下拉选择 gfvSumEh。就会在分组的 Footer 里面显示这一组的合计数字(小计)。
    5. DefaultStateExpanded - True 表格会加载后自动展开。否则加载后,是收缩的,只显示组,不显示组里面的记录。

    三、至此已经可以显示分组数据,但是对于需要计算比值的(如毛利率、占比等)却无能为力,通过事件DBGridEh1DataGroupFooterToDisplayText来修正。

    1、先定义一个单元内的变量
    cb, ss: Currency;
    2、
    procedure TForm1.DBGridEh1DataGroupFooterToDisplayText(
      Grid: TCustomDBGridEh; Column: TColumnEh;
      GroupFooter: TGridDataGroupFooterEh;
      FooterColumnItem: TGridDataGroupFooterColumnItemEh; var AValue: Variant;
      var DisplayValue: String; var Processed: Boolean);
    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;

  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/liangchua/p/7434505.html
Copyright © 2011-2022 走看看