Somar linhas selecionadas n grid, como?

Delphi

28/09/2005

Olá pessoal,

Estou precisando somar todas as linhas selecionadas em um DbGrid. O problema é que o campo ValorTotal que utilizado para saber o valor total da parcela, é um campo calculado. Assim toda vez que faço um While ele irá fazer TODOS os calculos de Todas as parcelas com meu codigo abaixo. Alguem tem alguma ideia de como fazer isso?

  with vClntDtStSoma do
  begin
    for Cont := 0 to SelectedRows.Count - 1 do
    begin
      GotoBookmark(Pointer(SelectedRows[Cont]));
      if vClntDtStSoma.FieldByName(FCampoStatus).Value <>
        FValorStatusPago then
      begin
        ValorLinha := vClntDtStSoma.FieldByName(NomeCampoSoma).Value;
        Somatorio := Somatorio + ValorLinha;
      end;
    end;
  end;


Como o campo é calculado o While é acionado cada vez que clico em uma linha, isso está matando o algorítimo, pois está lento. Alguem sabe como posso fazer ou tem alguma sugestão para fazer isso com campo calculado?

Obrigado.


Yallebr

Yallebr

Curtidas 0

Respostas

Cpd_arim

Cpd_arim

28/09/2005

Para realizar uma soma de campo valor de um DBGrid selecionando as linhas desejadas para a soma:

procedure TFMov_Nota.BitBtn1Click(Sender: TObject);
begin
DBEdit.Field.AsVariant:=0;
Query1.First;
While not Query1.Eof do
begin
if DBGrid1.SelectedRows.IndexOf(Query1.BookMark) >= 0 then
DBEdit1.Field.AsVariant :=
DBEdit1..Field.AsVariant+Query1CampoValor.AsVariant;
Query1.Next;
end;
end;


GOSTEI 0
Yallebr

Yallebr

28/09/2005

Amigo,

Como falei acima, não posso usar While EOF por causa dos campos calculados, cada vez que clicar em uma linha irá fazer um While e calcular meus campos calculados, isso fica muito lento.

Alguma outra sugestão?


GOSTEI 0
POSTAR