cxGrid合计时忽略某些记录

方法由俊哥提供

    某些报表要求在Grid中进行分类小计,如下图:

cxGrid合计时忽略某些记录_第1张图片

合计时应将“小计”行忽略,否则数重复计算了。

第1步:定义一个合计过程

    procedure cxGrid1DBBandedTableView1DataControllerSummaryFooterSummaryItemsSummary(
      ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
      var OutArguments: TcxSummaryEventOutArguments);

 

procedure TfrmMIOMonthlyPlus.cxGrid1DBBandedTableView1DataControllerSummaryFooterSummaryItemsSummary(
  ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
  var OutArguments: TcxSummaryEventOutArguments);
var
  i : integer;
begin
  i := vartoint(ASender.DataController.Values[Arguments.RecordIndex, colFlag.Index]);    //colFlag列对应字段值 = 3时,即小计的记录
  if i = 3 then
    OutArguments.Value := 0;
end;

第2步:为合计事件邦定上面定义的过程

procedure TfrmMIOMonthlyPlus.aSummaryExecute(Sender: TObject);
begin
  cxGrid1DBBandedTableView1.DataController.Summary.FooterSummaryItems.OnSummary :=   

          cxGrid1DBBandedTableView1DataControllerSummaryFooterSummaryItemsSummary;
  inherited;
end;

注意:

        理论第2步可能忽略的,我们只需双击cxGrid1DBBandedTableView1.DataController.Summary.FooterSummaryItems.OnSummary事件并写上第1步过程中的代码就可以了,但不知什么原因达不到我们想的效果(没有忽略小计行),所以第2步还是要写上。

你可能感兴趣的:(报表)