【属性设置】
1.cxGrid1DBBandedTableView1.OptionsView.FooterMultiSummaries = True; //如果为False时Footer就只能显示一行
2.双击cxGrid在弹出窗口的Summary页签, 加上要合计的Item并设好各个Item的Column、Format和Kind属性。 如下图
【代码部份】
uses
cxGridDBTableView;
private
lstCust: TStringList; //存放不同的客户编号记录
procedure TfrmVS.FormCreate(Sender: TObject);
begin
inherited;
lstCust := TStringList.Create; //创建lstCust对象
end;
procedure TfrmVS.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(lstCust); //释放lstCust对象
inherited;
end;
procedure TfrmVS.SmartDataSetMap1BeforeOpen(DataSet: TDataSet);
begin
lstCust.Clear; //重新打开数据集前清空lstCust
inherited;
...
end;
//cxGrid1DBBandedTableView1->DataController->Summary->FooterSummaryItems->OnSummary 事件
procedure TfrmVS.cxGrid1DBBandedTableView1DataControllerSummaryFooterSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
var
sCustNo: String;
begin
//只对colaCustNo列的合计进行处理
if TcxGridDBTableSummaryItem(Arguments.SummaryItem).Column = colaCustNo then
begin
sCustNo := vartostr(ASender.DataController.Values[Arguments.RecordIndex, colaCustNo.Index]);
if lstCust.IndexOf(sCustNo) = -1 then
begin
lstCust.Add(sCustNo); //记下之前未出现过的客户编号
end;
end;
end;
//合计Item的OnGetText 事件
procedure TfrmVS.cxGrid1DBBandedTableView1TSmartGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText(
Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean;
var AText: string);
begin
//lstCust.Count就是不同的客户数
AText := IntToStr(lstCust.Count);
end;
【运行效果】