Atualizar dados no String Grid
Estou usando o componente StringGrid para visualizar os dados de uma consulta na minha tela de pedidos. A tela funciona da seguinte forma: Quando escolho o pedido a ser vendido, automatricamente a StringGrid é preenchida com os descontos no preço do produto.
***O desconto depende do perfil que o cliente se encaixa.
Quando escolho o produto pela 1ª vez a StringGrid é preenchida normalmente. O problema é que ao escolher outro produto, ela continua com os mesmos valores do produto antigo.
Segue abaixo o código utilizado:
procedure TFrmVenda.SpdProdClick(Sender: TObject);
begin
FrmPrincipal.FormAcao := ´Ped_Cli´;
reserva := EdQtde.Text;
EdQtde.Text := ´´;
EdQtde.Text := reserva;
Application.CreateForm(TFrmLoc_Pro, FrmLoc_Pro);
FrmLoc_Pro.ShowModal;
end;
procedure TFrmVenda.PreencherProduto;
begin
EdCod_Pro.Text := DmDPL.TbProduto.FieldByName(´ID´).AsString;
LblNome_Pro.Caption := DmDPL.TbProduto.FieldByName(´NOME´).AsString;
LblUnit.Caption := DmDPL.TbProduto.FieldByName(´PRECO_PRAT´).AsString;
Calcular_DescModal;
LblDesc.Caption := FloatToStr(desconto);
DBTxtQtde_Etq.DataSource := DmDPL.DsProduto;
DBTxtQtde_Etq.DataField := ´ETQ_QTDE´;
EdQtde.Text := ´1´;
PreencherPreco;
end;
procedure TFrmVenda.PreencherPreco;
var
x : integer; //contador
produto, desconto, preco : real;
begin
//PREENCHER STRINGGRID COM PERFIL E SEUS PREÇOS
x := 0;
While not DmDPL.TbPerfil.Eof do
begin
produto := DmDPL.TbProduto.FieldByName(´PRECO_PRAT´).AsFloat;
desconto := DmDPL.TbPerfil.FieldByName(´DESCONTO´).AsFloat;
preco := (produto - ((produto * desconto) / 100));
StrGd.Cells[0,x] := DmDPL.TbPerfil.FieldByName(´NOME´).AsString;
StrGd.Cells[1,x] := FloatToStr(preco);
x := x + 1;
DmDPL.TbPerfil.Next;
end;
StrGd.
end;
Se puderem me ajudar ficarei muito agradecido....
Valew...... Feliz 2005 para todo o grupo!!!!!!!!!!!!!!!!!!!!
Rodrigo Freire..;.;
***O desconto depende do perfil que o cliente se encaixa.
Quando escolho o produto pela 1ª vez a StringGrid é preenchida normalmente. O problema é que ao escolher outro produto, ela continua com os mesmos valores do produto antigo.
Segue abaixo o código utilizado:
procedure TFrmVenda.SpdProdClick(Sender: TObject);
begin
FrmPrincipal.FormAcao := ´Ped_Cli´;
reserva := EdQtde.Text;
EdQtde.Text := ´´;
EdQtde.Text := reserva;
Application.CreateForm(TFrmLoc_Pro, FrmLoc_Pro);
FrmLoc_Pro.ShowModal;
end;
procedure TFrmVenda.PreencherProduto;
begin
EdCod_Pro.Text := DmDPL.TbProduto.FieldByName(´ID´).AsString;
LblNome_Pro.Caption := DmDPL.TbProduto.FieldByName(´NOME´).AsString;
LblUnit.Caption := DmDPL.TbProduto.FieldByName(´PRECO_PRAT´).AsString;
Calcular_DescModal;
LblDesc.Caption := FloatToStr(desconto);
DBTxtQtde_Etq.DataSource := DmDPL.DsProduto;
DBTxtQtde_Etq.DataField := ´ETQ_QTDE´;
EdQtde.Text := ´1´;
PreencherPreco;
end;
procedure TFrmVenda.PreencherPreco;
var
x : integer; //contador
produto, desconto, preco : real;
begin
//PREENCHER STRINGGRID COM PERFIL E SEUS PREÇOS
x := 0;
While not DmDPL.TbPerfil.Eof do
begin
produto := DmDPL.TbProduto.FieldByName(´PRECO_PRAT´).AsFloat;
desconto := DmDPL.TbPerfil.FieldByName(´DESCONTO´).AsFloat;
preco := (produto - ((produto * desconto) / 100));
StrGd.Cells[0,x] := DmDPL.TbPerfil.FieldByName(´NOME´).AsString;
StrGd.Cells[1,x] := FloatToStr(preco);
x := x + 1;
DmDPL.TbPerfil.Next;
end;
StrGd.
end;
Se puderem me ajudar ficarei muito agradecido....
Valew...... Feliz 2005 para todo o grupo!!!!!!!!!!!!!!!!!!!!
Rodrigo Freire..;.;
Rgfreire
Curtidas 0
Respostas
Michael
31/12/2004
Olá amigo Rodrigo!
Talvez não seria melhor você usar um ClientDataSet (ou SimpleDataSet), com campos calculados? Acho que seria melhor pois você não teria que escrever muito código.
Abraços!
Talvez não seria melhor você usar um ClientDataSet (ou SimpleDataSet), com campos calculados? Acho que seria melhor pois você não teria que escrever muito código.
Abraços!
GOSTEI 0
Vprates
31/12/2004
Bom dia
não seria o caso de vc limpar os valores da stringgrid antes de receber novos valores???
Obs: Nunca usei o stringgrid.
não seria o caso de vc limpar os valores da stringgrid antes de receber novos valores???
Obs: Nunca usei o stringgrid.
GOSTEI 0
Fsflorencio
31/12/2004
Amigo, vc deve fazer limpar as células para a nova pesquisa.
Ex.
For i := 0 to stringgrid.rowcount -1 do//linhas
for j := 0 to stringgrid.colcount -1 do//colunas
stringgrid.cells[j,i] := ´´;
isto deve limpar
depois que vc executar o procedimento de preencher onde ele deve dizer quantas linhas o stringgrid possui {stringgrid.rowcount := x}, para eliminar as linhas da pesquisa anterior ou alocar linhas para a nova pesquisa.
até.
Ex.
For i := 0 to stringgrid.rowcount -1 do//linhas
for j := 0 to stringgrid.colcount -1 do//colunas
stringgrid.cells[j,i] := ´´;
isto deve limpar
depois que vc executar o procedimento de preencher onde ele deve dizer quantas linhas o stringgrid possui {stringgrid.rowcount := x}, para eliminar as linhas da pesquisa anterior ou alocar linhas para a nova pesquisa.
até.
GOSTEI 0