盒子找的例子DBGrid 中文帐簿金额栏样式(可惜不能实现金额合计)http://www.2ccc.com/article.asp?articleid=2484
请问各位高手是否能用DBGridEh绘制中文帐簿金额栏,并在最后一行实现合计。

解决方案 »

  1.   

    在底部添加一行DBGridEh.FooterRowCount:=1
    DBGridEh.SumList.Active:=True;
    DBGridEh.Columns[0].Footers[0].ValueType:=fvtSum;
      

  2.   

    DBGridEh.FieldColumns['Wage'].Footers[0].ValueType:=fvtSum;
      

  3.   

    添加了之后
    DBGridEh1.FooterRowCount:=1;
    DBGridEh1.SumList.Active:=True;
    DBGridEh1.FieldColumns['借方金额'].Footers[0].ValueType:=fvtSum;检测到错误类Elisterror,错误信息:List index out of bounds(0)
      

  4.   

    我的DBGridEh1是adoquery动态查询,DBGridEh1.Columns上没有项目。并且DBGridEh1显示的“借方金额”数据库里的列名为“amtdebit”。当我DBGridEh1.Columns在设置好项目,并设置DBGridEh1的FooterRowCount属性为1,相关字段ValueType属性fvtSum时也能得到合计,但是这是的“帐簿金额栏样式”就消失,变回一般格式了。
      

  5.   

    在底部添加一行设置一下属性就可以了:
    DBGridEh.FooterRowCount:=1
    DBGridEh.SumList.Active:=True;
    DBGridEh.Columns[0].Footers[0].ValueType:=fvtSum;
      

  6.   

    “帐簿金额栏样式”代码如下:
    unit MainFrm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, ADODB, Math,DBGridEh;type
      TMainForm = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        DataSource1: TDataSource;
        DestGrid: TDBGrid;
        procedure DBGridEhDrawDataCell(Sender: TObject; const Rect: TRect;
          Field: TField; State: TGridDrawState);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;implementationuses
      StrUtils;{$R *.dfm}procedure TMainForm.DBGridEhDrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    var
        S: String;
        i, x, y, iTextWidth: Integer;
    begin
        if Field.DataType <> ftBCD then Exit;    with TDBGrid(Sender).Canvas do begin
            iTextWidth := TextWidth('8') + 4;
            y := Rect.Top + (Rect.Bottom - Rect.Top - TextHeight('8')) div 2;
            S := StringReplace(FormatFloat('0.00', Field.AsCurrency), '.', '', []);
            if Field.AsCurrency < 0 then Font.Color := clRed;        FillRect(Rect);        i := (Rect.Right - Rect.Left) div iTextWidth;
            repeat
                x := Rect.Right - iTextWidth * i;
                if i <= Length(S) then
                    TextOut(x+3, y, S[Length(S)-i+1]);            if i = 2 then
                    Pen.Color := clRed
                else if (i = 0) or ( (i>2) and (((i-2) mod 3) = 0) ) then
                    Pen.Color := clGreen
                else
                    Pen.Color := clSilver;
                MoveTo(x, Rect.Top);
                LineTo(x, Rect.Bottom);
                Dec(i);
            until (i<0)
        end;
    end;end.
      

  7.   

    (~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ