Atualizar dados no String Grid

Delphi

31/12/2004

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..;.;


Rgfreire

Rgfreire

Curtidas 0

Respostas

Michael

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!


GOSTEI 0
Vprates

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.


GOSTEI 0
Fsflorencio

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é.


GOSTEI 0
POSTAR