用DBGridEh绘制中文帐簿金额栏,并实现合计。 盒子找的例子DBGrid 中文帐簿金额栏样式(可惜不能实现金额合计)http://www.2ccc.com/article.asp?articleid=2484请问各位高手是否能用DBGridEh绘制中文帐簿金额栏,并在最后一行实现合计。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在底部添加一行DBGridEh.FooterRowCount:=1DBGridEh.SumList.Active:=True;DBGridEh.Columns[0].Footers[0].ValueType:=fvtSum; DBGridEh.FieldColumns['Wage'].Footers[0].ValueType:=fvtSum; 添加了之后DBGridEh1.FooterRowCount:=1;DBGridEh1.SumList.Active:=True;DBGridEh1.FieldColumns['借方金额'].Footers[0].ValueType:=fvtSum;检测到错误类Elisterror,错误信息:List index out of bounds(0) 我的DBGridEh1是adoquery动态查询,DBGridEh1.Columns上没有项目。并且DBGridEh1显示的“借方金额”数据库里的列名为“amtdebit”。当我DBGridEh1.Columns在设置好项目,并设置DBGridEh1的FooterRowCount属性为1,相关字段ValueType属性fvtSum时也能得到合计,但是这是的“帐簿金额栏样式”就消失,变回一般格式了。 在底部添加一行设置一下属性就可以了:DBGridEh.FooterRowCount:=1DBGridEh.SumList.Active:=True;DBGridEh.Columns[0].Footers[0].ValueType:=fvtSum; “帐簿金额栏样式”代码如下: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. (~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ(~ o ~)~zZ 我用 CreatePopupMenu 创建了菜单后,能否为他设置背景图及图标?? 请教各位高手 Delphi中访问FTP怎么设置PASV模式(新手提问,谢谢) 请问那里有可以安装的FastReport下载啊!!!!! ActionManager如何生成右键菜单???? 热键!!!在祖先Form中定义了热键,如其子孙窗口中如何调用? 请各位大虾帮忙分析一下这段程序?奇怪啊 表格支持拖动行列、单元格斜线,自定义换肤?? 如何在String中取得一个小的String? 控件故障,求救!!! [求助]delphi调用PB写的dll文件 WM_DEVICECHANGE或者别的方法如何区别U盘和手机
DBGridEh.SumList.Active:=True;
DBGridEh.Columns[0].Footers[0].ValueType:=fvtSum;
DBGridEh1.FooterRowCount:=1;
DBGridEh1.SumList.Active:=True;
DBGridEh1.FieldColumns['借方金额'].Footers[0].ValueType:=fvtSum;检测到错误类Elisterror,错误信息:List index out of bounds(0)
DBGridEh.FooterRowCount:=1
DBGridEh.SumList.Active:=True;
DBGridEh.Columns[0].Footers[0].ValueType:=fvtSum;
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.