DBGridEh怎么动态建立汇总?急...在线等待 ( 积分: 100 )

  • 主题发起人 主题发起人 softdelphi8
  • 开始时间 开始时间
S

softdelphi8

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3834677

我的操作过程是这样的:
先在双击DBGridEh建立字段列表,然后再在数字类型的字段建立TColumnFooterEh,最后设置ValueType类型,这个DBGridEh就会在最下面列出结果。
因为上面是静态建立的,所以非常不方面维护,请大家帮助如何动态实现这个功能?
 
我代码是动态创建显示的列及汇总行,希望对你有帮助.
for i := 0 to ACtrlData.RecordCount - 1 do
begin
with GridEH.Columns.Add do
begin
FieldName := ACtrlData.FieldByName('SBF_FieldName').AsString;
.......
if ACtrlData.FieldByName('SBF_IsSum').AsString = '1' then //求和
begin
if not (GridEh.FooterRowCount = 1) then
GridEh.FooterRowCount := 1;
Footer.FieldName := FieldName;
Footer.ValueType := fvtSum;
Footer.Alignment := taRightJustify;
Footer.DisplayFormat := DisplayFormat;
end;
end;
ACtrlData.Next;
end;
SetFooterOfDBGridEh(GridEH);

procedure SetFooterOfDBGridEh(ADBGridEh: TDBGridEh);
begin
with ADBGridEh do
begin
//if FooterRowCount = 1 then Exit;
FooterColor := clSilver;
with FooterFont do
begin
Name := 'Tahoma';
Size := 8;
Style := [fsBold];
end;
with SumList do
begin
VirtualRecords := True;
Active := True;
end;
with Columns[0].Footer do
begin
ValueType := fvtStaticText;
Value := '合计:';
end;
end;
end;
 
正在实验/测试,如有问题就请你帮助!!!
 
happycyp, 你好!
怎么执行你的代码后,Grid里的数据都不见了,Grid的字段名称变成数字或空的了。
下一步要怎么做?
 
不知道你是怎么写的?
你问问题最好把代码贴出来.
 
我是建立一个新的工程,然后把数据库连上,显示出了数据。
其它就把你的代码放到里,执行你的代码,就出现上面的情况。
 
我晕,我的代码不合适你.需要根据你的情况进行变通的.
算了,代码都不贴,我帮不了你了.
 
还有另外一个问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3834677
 
procedure CalcTotalAmt(CalcDbg: TDbGrideh;
FieldName: array of string; valType: array of TFooterValueType);
var
i, iLen: integer;
CalcColumnEh: TColumnEh;
begin
if high(valType) <> high(FieldName) then
begin
showMessage('合计函数失败,字段数与字段类型描述数不符!');
exit;
end;
CalcDbg.FooterRowCount := 1;
calcDbg.FooterColor := clBtnFace;
iLen := high(ValType);
for i := 0 to iLen do
begin
CalcColumnEh := CalcDbg.FieldColumns[FieldName];
if CalcColumnEh <> nil then
begin
if ValType = fvtStaticText then
begin
CalcColumnEh.Footer.ValueType := fvtStaticText;
CalcColumnEh.Footer.Value := '合计:';
end
else
if ValType = fvtSum then
begin
CalcColumnEh.Footer.ValueType := fvtSum;
CalcColumnEh.Footer.FieldName := FieldName;

end
else
if ValType = fvtCount then
begin
CalcColumnEh.Footer.ValueType := fvtCount;
CalcColumnEh.Footer.FieldName := FieldName;
end;
CalcColumnEh.Footer.Font.Color := clblue;
end;
end;
CalcDbg.SumList.Active := true;
CalcDbg.SumList.RecalcAll;
end;

调用:CalcTotalAmt(dbgrid,['字段1','字段2'],[fvtStaticText,fvtsum])
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3834677
请大家回答上面一个贴的问题。在线急!!!
 
帮你顶一个,接个分
 
啥意思。这个写的这么多,应该有人答出来了吧。
 
接受答案了.
 
我觉得hgood,happycyp的答案都写的不错。你可能要把别人的代码拿去测试一下。有问题先自己改改看。这个功能很简单的,无非把你手工的操作让代码去实现,达到动态控制而已。
 
后退
顶部