Fórum Somar linhas selecionadas n grid, como? #297428
28/09/2005
0
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
Curtir tópico
+ 0
Responder
Posts
28/09/2005
Cpd_arim
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;
Responder
Gostei + 0
28/09/2005
Yallebr
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?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)