Fórum Somar Valor Linhas DbGrid #551140
12/04/2016
0
Preciso somar as linhas do dbgrid com duplo clique ou com o enter.Mais não estou conseguindo no Edit EdtValorParcial só aparece o valor da parcela que eu der dois clique eu precisava por exemplo se eu der duplo clique na parcela 1/4 e na parcela 1/5 teria que aparecer no valor Total R$ 198,63 e não aparece aparece R$ 99,32
[img:descricao=Valor Total Parcelas]http://arquivo.devmedia.com.br/forum/imagem/316964-20160412-120025.jpg[/img]
procedure TForm1.DBGridDblClick(Sender: TObject);
var
i: integer;
total: double;
begin
total := 0;
for i := 0 to DBGrid.SelectedRows.Count - 1 do
begin
total := total + ClientDataSet.FieldByName('Liquido').AsFloat;
end;
EdtValorParcial.Text := FloatToStrF(total,ffCurrency,15,2);
end;
Bruno Henrique
Curtir tópico
+ 0Posts
12/04/2016
Natanael Ferreira
for i := 0 to DBGrid.SelectedRows.Count - 1 do
Se quiser ir somando apenas com duplo clique faça:
procedure TForm1.DBGridDblClick(Sender: TObject);
var
total: double;
begin
total := total + ClientDataSet.FieldByName('Liquido').AsFloat;
EdtValorParcial.Text := FloatToStrF(total,ffCurrency,15,2);
end;Não se esqueça de zerar a variável Total ao sair do form (onClose).
Gostei + 0
12/04/2016
Bruno Henrique
Muito obrigado pela ajuda!!!
Acabei de tentar mais mesmo assim ele continua aparecendo no EdtValorParcial.Text o valor da linha que eu dou duplo clique ele continua não somando!!!
Tem outra sugestão?
Gostei + 0
12/04/2016
Raylan Zibel
Gostei + 0
12/04/2016
Bruno Henrique
Deu certo!!!
Como faço agora para quando eu clicar em cima de uma linha já clicada para não clicar novamente para não gerar valor em duplicidade
Gostei + 0
12/04/2016
Raylan Zibel
etc, etc..
Gostei + 0
12/04/2016
Bruno Henrique
Você teria algum exemplo por favor!!!
Grato
Gostei + 0
12/04/2016
Raylan Zibel
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, DBClient;
type
TForm1 = class(TForm)
dbgrd1: TDBGrid;
edt1: TEdit;
ds1: TDataSource;
cds1: TClientDataSet;
cds1codigo: TIntegerField;
cds1valor: TFloatField;
procedure FormCreate(Sender: TObject);
procedure dbgrd1DblClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
total: Double;
clicados: TStringList;
procedure atualizaedit;
procedure criadataset;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Math;
{$R *.dfm}
procedure TForm1.atualizaedit;
begin
// so pra nao repetir no create
edt1.Text := FloatToStr(total);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
criadataset;
total := 0;
atualizaedit;
clicados := TStringList.Create;
end;
procedure TForm1.dbgrd1DblClick(Sender: TObject);
begin
if not clicados.IndexOf(IntToStr(dbgrd1.DataSource.DataSet.RecNo)) > -1 then
begin
clicados.Add(IntToStr(dbgrd1.DataSource.DataSet.RecNo));
total := total + dbgrd1.DataSource.DataSet.fieldbyname('valor').AsFloat;
end;
atualizaedit;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
clicados.Free;
end;
procedure TForm1.criadataset;
var
i, j: integer;
begin
// só pra ter conteudo no grid
cds1.CreateDataSet;
for i := 1 to 10 do
begin
j := RandomRange(100, 1000);
cds1.Insert;
cds1codigo.Value := i;
cds1valor.Value := i * j / 100;
cds1.Post;
end;
end;
end.
Gostei + 0
12/04/2016
Bruno Henrique
Deu certíssimo, muito obrigado mesmo!!!
Só mais uma coisa!!!
Eu coloquei uma
showmessage(Duplicata Já Selecionada)
Abraçooss
Obrigado
Gostei + 0
12/04/2016
Raylan Zibel
if not clicados.IndexOf(IntToStr(dbgrd1.DataSource.DataSet.RecNo)) > -1 then
begin
clicados.Add(IntToStr(dbgrd1.DataSource.DataSet.RecNo));
total := total + dbgrd1.DataSource.DataSet.fieldbyname('valor').AsFloat;
end
else
showmessage('Duplicata Já Selecionada');
Gostei + 0
12/04/2016
Bruno Henrique
Resolvido.Muito Obrigado
Abraços
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)