Dúvida com DbGrid
Imagine uma query trazendo um fetch de dados e mostrados num DBgrid. Acontece, que gostaria que o Dbgrid tivesse uma linha(não coluna) que me mostrasse o somatório de todos os campos numéricos. Esse somatório não tem na query e nem o pode ter. Existe como fazer isso num DBgrid? Quando eu usava o cxGrid da DevExpress, ele me dava essa condição, mas com o DBGrid eu não sei fazer e já vi. Alguém sabe?
Paulo
Curtidas 0
Respostas
Prmcibor
06/03/2009
Você pode usar um campo calculado (Calculated Field) no seu componente que está associado ao dbgrid.
Depois de criado o campo calculado, no evento OnCalcFields vc faz e soma e joga o valor nesse campo calculado.
Voce está usando qual componente de acesso a dados?
Depois de criado o campo calculado, no evento OnCalcFields vc faz e soma e joga o valor nesse campo calculado.
Voce está usando qual componente de acesso a dados?
GOSTEI 0
Prmcibor
06/03/2009
Na verdade a solução anterior é para coluna, para linha vc deve digitar um clientdataset e fazer um while somando os valores e depois adicionando uma linha no final como se fosse um banco de dados.
GOSTEI 0
Paulo
06/03/2009
Mas como eu faço isso?
GOSTEI 0
Woinch
06/03/2009
Primeiro traga uma nova coluna no DataSet ORDEM trazendo o valor ZERO como padrão. Faça um loop passando por todo o DataSet da seguinte maneira:
Insira uma nova linha no DataSet com o conteúdo ORDEM = 1 e com o valor da variável dTotal:
Lembre-se que para trazer a linha de totalização ao final do Grid você deve setar em primeiro lugar a coluna ORDEM na propriedade IndexFields.
Espero ter ajudado...
while not DataSet.Eof do begin dTotal := dTotal + FieldByName(´COLUNA_A_SER_TOTALIZADA´).AsFloat; Next; end;
Insira uma nova linha no DataSet com o conteúdo ORDEM = 1 e com o valor da variável dTotal:
DataSet.Insert; DataSet.FieldByName(´ORDEM´).AsInteger := 1; DataSet.FieldByName(´COLUNA_A_SER_TOTALIZADA´).AsFloat := dTotal; DataSet.Post;
Lembre-se que para trazer a linha de totalização ao final do Grid você deve setar em primeiro lugar a coluna ORDEM na propriedade IndexFields.
Espero ter ajudado...
GOSTEI 0