QuantumGrid - criar, atualizar e remover somatorios de um cxGrid

Top  Previous  Next

// estrutura na tela:

Grid

   Nivel - Dados

 

// onde

Grid : TcxGrid

Nivel: TcxGridLevel

Dados: TcxGridDBTableView

 

uses cxGridDBTableView, cxGridTableView, cxGrid, cxGridCustomView, cxGridStyleSheetsPreview, 

     cxStyleSheetEditor, Cxstyles;

 

----------------------------------------

// QuantumGrid - criar, atualizar e remover somatorios de um cxGrid

// criando somatorios de grupo no braço (nao esqueça que o rodapé do grupo

// tem que está visivel)

Dados.DataController.Summary.BeginUpdate;

try

  var

    ASummaryItems: TcxDataSummaryItems;

  begin

    ASummaryItems:= DadosGrid.DataController.Summary.DefaultGroupSummaryItems;

  

    with TcxGridTableSummaryItem(ASummaryItems.Add) do

    begin

      Column:= DadosGridAGENCIA;

      Kind:= skCount;

      Position := spFooter;

    end;

  end

 

  Dados.DataController.Summary.SummaryGroups.Clear;

  with Dados.DataController.Summary.SummaryGroups.Add do

  begin

    // Campo do grupo 

    TcxGridTableSummaryGroupItemLink(Links.Add).Column := DadosSECAO;

    // CAMPO 1

    with SummaryItems.Add as TcxGridDBTableSummaryItem do

    begin

      Column   := DadosVLR_VENDA;

      Kind     := skSum;

      Format   := '#,##0.00';

      Position := spFooter; // tire isso para fazer no cabeçalho do grupo

    end;

 // CAMPO 2

    with SummaryItems.Add as TcxGridDBTableSummaryItem do

    begin

      Column   := DadosCODIGO;

      Kind     := skCount;

      Format   := '0';

      Position := spFooter; // tire isso para fazer no cabeçalho do grupo

    end;

  end;

finally

  Dados.DataController.Summary.EndUpdate;

end;

 

// criar somatorio no rodapé da grid (geral)

Dados.DataController.Summary.BeginUpdate;

try

  with Dados.DataController.Summary.FooterSummaryItems.Add as TcxGridDBTableSummaryItem do

  begin

    Column := DadosCODIGO;

    Kind   := skCount;

    Format := '#,##0';

  end;

finally

  Dados.DataController.Summary.EndUpdate;

end;

//Update all open details of the master view (tvCars)

Dados.DataController.ClearDetails;

 

// retorna TRUE se o campo passado como parametro tem somatório

function CampoHasSum(const Campo: TField): Boolean;

var

  I, C: Integer;

  X: TcxGridDBTableSummaryItem;

begin

  Result := False;

  // percorre os grupos definidos

  for I := 0 to Dados.DataController.Summary.SummaryGroups.Count-1 do

    // percorre os itens deste grupo

    for C := 0 to Dados.DataController.Summary.SummaryGroups[I].SummaryItems.Count-1 do

    begin

      // o item é transferido para "x" que é do tipo Item de somatorio

      X := TcxGridDBTableSummaryItem(Dados.DataController.Summary.SummaryGroups[I].SummaryItems[C]);

      // o campo do X é igual ao campo do parametro da função?

      if Campo = X.Column.DataBinding.Field then

      begin

        Result := True;

        Break;

      end;

      if Result then Break;

    end;

end;