Somar linhas selecionadas n grid, como?
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?
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.
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
Curtidas 0
Respostas
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;
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
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?
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