我把计算效率的方法放在数据集的AfterOpen 事件后能实现效率计算,但是用dbgrideh本地过滤功能后,合计值能根据过滤条件更新,效率计算则失效了。。我把下面的代码放在数据集的AfterScroll 事件后能根据过滤条件更新效率,但是速度让人难以接受。
请教下达人们有没有更好的实现方法。// 所有数值类型的字段表格Footer自动设定Sum功能
for i := 0 to dbgDetail.Columns.Count - 1 do // Iterate
begin
if dbgDetail.Columns[i].Visible = False then Continue; if dbgDetail.Columns[i].Field.DataType in [ ftSmallint, ftInteger, ftWord,
ftFloat, ftCurrency, ftLargeint] then
begin
(dbgDetail.Columns[qryDetail.Fields[i].Index]
as TDBGridColumnEh).Footer.ValueType := fvtSum;
end;
//根据合计值计算效率
if (i>2) and (dbgDetail.Columns[i-1].FieldName='FACT_HOUR')and (dbgDetail.Columns[i-2].FieldName='PRE_HOUR') then
begin
(dbgDetail.Columns[i] as TDBGridColumnEh).Footer.ValueType := fvtStaticText;
(dbgDetail.Columns[i] as TDBGridColumnEh).Footer.Value :='效率';
Ffact:=(dbgDetail.Columns[i-1] as TDBGridColumnEh).Footer.SumValue;
Fper:=(dbgDetail.Columns[i-2] as TDBGridColumnEh).Footer.SumValue;
if Fper<>0 then
begin
(dbgDetail.Columns[i+1] as TDBGridColumnEh).Footer.ValueType := fvtStaticText;
(dbgDetail.Columns[i+1] as TDBGridColumnEh).Footer.Value :=formatfloat('0.00',100*Ffact/Fper)+'%';
end;
end;
end;
请教下达人们有没有更好的实现方法。// 所有数值类型的字段表格Footer自动设定Sum功能
for i := 0 to dbgDetail.Columns.Count - 1 do // Iterate
begin
if dbgDetail.Columns[i].Visible = False then Continue; if dbgDetail.Columns[i].Field.DataType in [ ftSmallint, ftInteger, ftWord,
ftFloat, ftCurrency, ftLargeint] then
begin
(dbgDetail.Columns[qryDetail.Fields[i].Index]
as TDBGridColumnEh).Footer.ValueType := fvtSum;
end;
//根据合计值计算效率
if (i>2) and (dbgDetail.Columns[i-1].FieldName='FACT_HOUR')and (dbgDetail.Columns[i-2].FieldName='PRE_HOUR') then
begin
(dbgDetail.Columns[i] as TDBGridColumnEh).Footer.ValueType := fvtStaticText;
(dbgDetail.Columns[i] as TDBGridColumnEh).Footer.Value :='效率';
Ffact:=(dbgDetail.Columns[i-1] as TDBGridColumnEh).Footer.SumValue;
Fper:=(dbgDetail.Columns[i-2] as TDBGridColumnEh).Footer.SumValue;
if Fper<>0 then
begin
(dbgDetail.Columns[i+1] as TDBGridColumnEh).Footer.ValueType := fvtStaticText;
(dbgDetail.Columns[i+1] as TDBGridColumnEh).Footer.Value :=formatfloat('0.00',100*Ffact/Fper)+'%';
end;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货