你试一下
当改了主表后
SumList.Action:=false
再SumList.Action:=True来刷新一下!
这里有个过程!
///*****************************************************************************
//用控制 DbGridEh 加入 单元 GridsEh, DBGridEh,
//并要改 DBGridEh.pas中有个procedure OptimizeColsWidth(ColumnsList: TColumnsEhList);它是在protected中的,把它移动到public域,这样才能在程序中就可以调用
//--------------------------------------------------------------------------------
// 功能:设定 DbGridEh 合计行信息
// 参数: pDbGrid:TDBGridEh;
// pcFields : string ; 字段列表,字段用逗号分隔
// pvtType : TFooterValueType ; 统计类型 TFooterValueType = (fvtNon, fvtSum, fvtAvg, fvtCount, fvtFieldValue, fvtStaticText);
// pbISRequery : boolean=False ; 是否刷新 合计行信息 (默认为不刷新)
// AChangefvtStaticText:boolean=False ; 是否将 统计类型 转换为 fvtStaticText 类型 并将值:=统计值 (默认为不转换)
// 引用:StrToStringList
// 例如:DbGridEhFoot( DbGridEh1, 'Number,Sum', fvtSum,true,true); 设定数量和金额字段为合计统计 ,并刷新 合计统计 ; 将 统计类型 转换为 fvtStaticText 类型 并将值:=统计值
//--------------------------------------------------------------------------------
procedure My_DbGridEhFoot(pDbGrid: TDBGridEh; pcFields: string;
pvtType: TFooterValueType;pbISRequery : boolean;AChangefvtStaticText:boolean);
var nFldLoop : integer ;
cFieldName : string ;
tmpFldList : TStringList ;
sSumValue :string;
begin
pDbGrid.FooterRowCount := 1; // 指定网格尾部统计行行数
if pbISRequery then pDbGrid.SumList.Active := false; // // 使统计可以刷新
pDbGrid.SumList.Active := true; // 激活统计
// pDbGrid.FooterColor := clBtnFace ; // 指定统计行颜色
pDbGrid.Columns[0].Footer.ValueType := fvtStaticText;
pDbGrid.Columns[0].Footer.Value := '合计:';
tmpFldList := TStringList.Create ;
try
My_StrToStringList( Uppercase(pcFields),',',tmpFldList ); // 将字符串转换为串列表
For nFldLoop := 0 to pDbGrid.Columns.Count -1 do
begin
//使不是第一列的不显示为合计
if (trim(pDbGrid.Columns[nFldLoop].Footer.Value)='合计:') and (nFldLoop<>0) then
pDbGrid.Columns[nFldLoop].Footer.Value := '';
cFieldName := pDbGrid.Columns[nFldLoop].FieldName ; // 网格列字段名
if tmpFldList.IndexOf( uppercase( cFieldName ) ) >= 0 then
begin
if AChangefvtStaticText then //将统计类型 转换为 fvtStaticText 类型 并将值:=统计值
begin
pDbGrid.Columns[nFldLoop].Footer.ValueType := pvtType;
sSumValue:=pDbGrid.Columns[nFldLoop].Footer.SumValue;
pDbGrid.Columns[nFldLoop].Footer.ValueType := fvtStaticText;
pDbGrid.Columns[nFldLoop].Footer.Value:=sSumValue;
end//if AChangefvtStaticText then //将统计类型 转换为 fvtStaticText 类型 并将值:=统计值
else //正常的
pDbGrid.Columns[nFldLoop].Footer.ValueType := pvtType ; // 统计类型
end;
end ;
finally
tmpFldList.Free ;
end;//try..finally
end;