1.分组统计
var
I:integer;
lCol: TcxGridDBColumn;
csglink : TcxDataSummaryGroupItemLink;
csg : TcxDataSummaryGroup;
csgItem : TcxDataSummaryItem;
----------------------------------------------------------
begin
//给Grid添加一个新列 SECTION
csg := cxgrdbtblvw_for_doctortv.DataController.Summary.SummaryGroups.Add;
//创建汇总项
// csg.Links.Clear;
lCol:= cxgrdbtblvw_for_doctortv.Columns[0];
lcol.Caption := '';//此处用来设置分组的名称
// lCol.Caption:= cxgrdbtblvw_for_doctortv.Columns[0].Caption;
lCol.Visible := False; //设置不可见
lCol.GroupIndex := 0; //设置按此列进行分组合计
csglink := csg.Links.Add;
csglink.ItemLink := cxgrdbtblvw_for_doctortv.Columns[0];
cxgrdbtblvw_for_doctortv.DataController.Groups.FullExpand;
cxgrdbtblvw_for_doctortv.OptionsView.Footer := true;
cxgrdbtblvw_for_doctortv.OptionsView.GroupFooters:= gfVisibleWhenExpanded;
for i := 0 to qry_for_tongji.FieldCount-1 do
begin
if i > 2 then
begin
cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupkind := skSum;
cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupFormat := ':0';
csgitem := csg.SummaryItems.Add;
csgitem.ItemLink := cxgrdbtblvw_for_doctortv.Columns[i]; //汇总字段1
csgitem.Kind := skSum;
csgItem.Format := '#,0.00;-#,0.00; #';
csgItem.Position := spFooter;
end;
if i = 1 then
begin
cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupkind := skSum;
cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupFormat := ':0';
csgitem := csg.SummaryItems.Add;
csgitem.ItemLink := cxgrdbtblvw_for_doctortv.Columns[i]; //汇总字段1
csgitem.Kind := skMin;
csgItem.Format := '合计:';
csgItem.Position := spFooter;
end;
end;
cxgrdbtblvw_for_doctortv.OptionsView.GroupSummaryLayout := gslAlignWithColumnsAndDistribute;
dxbrbtn4.Enabled := True;
end;
2.添加footer的函数
procedure Tfrmtongji.CreateSumFooter(cxTableView: TcxGridDBTableView;
const fieldList: string);
var
i: Integer;
f: TcxGridDBTableSummaryItem;
l: TStringList;
begin
l := TStringList.Create;
l.DelimitedText := fieldList;
l.Delimiter := ',';
cxTableView.OptionsView.Footer := True;
for i := 0 to cxTableView.ColumnCount - 1 do
begin
if l.IndexOf(cxTableView.Columns[i].DataBinding.FieldName) <> -1 then
begin
f := (cxTableView.DataController.Summary.FooterSummaryItems.Add) as TcxGridDBTableSummaryItem;
f.FieldName := cxTableView.Columns[i].DataBinding.FieldName;
f.Column := cxTableView.Columns[i];
if (f.FieldName <> '医师编码') and (f.FieldName <> '医师名称') and (f.fieldName <> '科室名称') then
begin
f.Kind := skSum;
f.Format := '#,0.00;-#,0.00; #';
end
else if (f.FieldName = '医师编码') then
begin
f.Kind := skcount;
f.Format := '合计:';
end;
end;
end;
l.Free;
end;
3.手工添加footer
A:先手动添加一个column,然后设置所添加footer的column,然后就可以在ongettext()中添加 AText := '合计';
在Footer的第一列显示[合计:]
加一个Summary项,Column设为Grid的第一列,Kind设为skNone
在该Summary项的OnGetText事件中,输入:
procedure TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText(
Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean;
var AText: String);
begin
AText := '合计:';
end;
按条件汇总:
在TableView的DataController->Summary->FooterSummary->OnSummary事件中,输入:
procedure TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
begin
//得到字段名 TcxDBDataSummaryItem(Arguments.SummaryItem).FieldName;
if (ASender.DataController.Values[Arguments.RecordIndex, tvExpenseLevel.Index] > 1) //只统计Level列=1的值
and (TcxDBDataSummaryItem(Arguments.SummaryItem).Kind = skSum) then
OutArguments.Value := 0; //Level > 1的统计值设为0
本文转自鹅倌51CTO博客,原文链接: http://blog.51cto.com/kaixinbuliao/979236,如需转载请自行联系原作者