Fórum Formatar os campos de um dbgrid usando DisplayFormat #416311

07/05/2012

0

Bom dia, estou iniciando no Delphi e usando a versão 2010.
Tenho um sistema para fazer consultas de forma generica usando o comando inherited;
para pegar os parametros nas outras consultas. Porém em uma de minhas consultas, no caso a de produto
os campos de qtd e de valor não estão saindo formatados. ex: Qtde : 4,2 sendo que deveria aparece 4,200
ou o valor R$ 9,9 que deveria aparecer 9,99.

Segue o fonte da unica consulta que não deu certo. Alguém pode me ajudar???

unit untConsultaProduto;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, untConsultaGeneric, untDMPrinc, pngimage, JvExControls, JvXPCore, JvXPButtons,
StdCtrls, JvExStdCtrls, JvEdit, JvValidateEdit, Grids, DBGrids, ExtCtrls, DB;


type
TfrmConsultaProduto = class(TfrmConsultaGeneric)
lblNomeProd: TLabel;

function colunas: String;
procedure edtTextoChange(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure btnConcluidoClick(Sender: TObject);
procedure posicionar;
procedure gridListaDblClick(Sender: TObject);
procedure btnCancelarClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private

procedure montarGrid;

{ Private declarations }
public
procedure pesquisaItem(nome:String);
{ Public declarations }
end;

var
frmConsultaProduto : TfrmConsultaProduto;


implementation

uses ControllConsulta, ControllPrincipais, untPreVenda;

{$R *.dfm}

procedure TfrmConsultaProduto.btnCancelarClick(Sender: TObject);
begin
retCons:= false;
inherited;
//untPreVenda.frmPreVenda.limpaCampos;
if DMPrinc.CDSDadosGrid.RecordCount > 0 then
begin

DMPrinc.CDSDadosGrid.Delete;
DMPrinc.CDSDadosGrid.Append;
untPreVenda.frmPreVenda.gridProdutos.SelectedIndex:=0;
untPreVenda.frmPreVenda.gridProdutos.SetFocus;
end;


end;


procedure TfrmConsultaProduto.btnConcluidoClick(Sender: TObject);
var
ini : TLerINI;
princ :TPrincPedido;
cod : String;
codigo : String;
ret: Boolean;
item : Integer;
begin

cod := ini.config(DAVP,CodBarra);

item := DMPrinc.CDSDadosGrid.RecordCount;
item := item + 1;


with gridLista do
begin
if cod = 0 then
begin
codigo := gridLista.Fields[0].Value;
ret := princ.insereProduto(codigo, 1, item);
// frmPreVenda.gridProdutos.SelectedIndex := frmPreVenda.gridProdutos.SelectedIndex + 2;
posicionar;
end
else
begin
codigo := gridLista.Fields[1].Value;
ret := princ.insereProduto(codigo, 1, item);
posicionar;
end;
end;
retCons:= true;
inherited;


end;

function TfrmConsultaProduto.colunas: String;
var
colunas :String;
begin
colunas := codigo,barras,nome,und_venda,preco_consumidor, qtd_em_estoque;
Result := colunas;




end;

procedure TfrmConsultaProduto.edtTextoChange(Sender: TObject);
begin
inherited;
if edtTexto.Text <> then
begin
pesquisaItem(edtTexto.Text);
end;
end;

procedure TfrmConsultaProduto.FormActivate(Sender: TObject);
begin
inherited;
montarGrid;
nCol := gridLista.Columns.Items[2].FieldName;
pesquisaItem(lblNomeProd.Caption);
gridLista.SetFocus;
end;

procedure TfrmConsultaProduto.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if key = VK_ESCAPE then
begin
if btnCancelar.Enabled = true then
btnCancelarClick(Self);
end;

if key = VK_F10 then
begin
if btnConcluido.Enabled = true then
btnConcluidoClick(Self);

end;

end;

procedure TfrmConsultaProduto.gridListaDblClick(Sender: TObject);
begin
inherited;
btnConcluidoClick(Sender);
end;

procedure TfrmConsultaProduto.montarGrid;
var
retorno: Boolean;
con: TConsulta;
begin

with gridLista do
begin

Columns[0].FieldName := codigo;
Columns[0].Title.Caption := Codigo;
Columns[0].Width := 90;

Columns[1].FieldName := barras;
Columns[1].Title.Caption := Cod. Barras;
Columns[1].Width := 160;

Columns[2].FieldName := nome;
Columns[2].Title.Caption := Nome;
Columns[2].Width := 400;

Columns[3].FieldName := und_venda;
Columns[3].Title.Caption := Uni.;
Columns[3].Width := 50;

Columns[5].FieldName := preco_consumidor;
Columns[5].Title.Caption := Preço;
Columns[5].Width := 100;

Columns[4].FieldName := qtd_em_estoque;
Columns[4].Title.Caption := Qtde.;
Columns[4].Width := 100;

Font.Size := 11;
end;

retorno := con.contuirGrid(colunas, estoque);
with DMPrinc do
begin
TFloatField(CDSConsulta.FieldByName(preco_consumidor)).DisplayFormat:=#,###,##0.00;
TFloatField(CDSConsulta.FieldByName(qtd_em_estoque)).DisplayFormat:=#,###,##0.00;

end;
end;



procedure TfrmConsultaProduto.pesquisaItem(nome: String);
var
consult: TConsulta;
ret: Boolean;
nomeProd : String;
begin
nomeProd := %+nome+%;
ret := consult.procuraItem(colunas,estoque,nCol,nomeProd);
end;

procedure TfrmConsultaProduto.posicionar;
var
ini: TLerINI;
pos : String;
begin
pos := ini.config(ITEM,opcaoItem);
if pos = 0 then
begin
DMPrinc.CDSDadosGrid.Edit;
DMPrinc.CDSDadosGrid.Post;

DMPrinc.CDSDadosGrid.Append;
end
else
begin
DMPrinc.CDSDadosGrid.Edit;
DMPrinc.CDSDadosGrid.Post;
frmPreVenda.gridProdutos.SelectedIndex := frmPreVenda.gridProdutos.SelectedIndex + 2;
end;


end;

end.

Guilherme

Guilherme

Responder

Post mais votado

07/05/2012

Rapaz, tente formatar os campos logo após criá-los, não no fim do método como você está fazendo. Veja se surte algum efeito.

Joel Rodrigues

Joel Rodrigues
Responder

Gostei + 2

Mais Posts

07/05/2012

Guilherme

Pode me dar um exemplo, pois coloquei logo abaixo do select, e depois testei também na hora de criar as
colunas, mas nas duas ocasioes deram o mesmo erro: CDScONSULTA: FIELD preco_consumidor not found.

Columns[5].FieldName := preco_consumidor;
TFloatField(DMPrinc.CDSConsulta.FieldByName(preco_consumidor)).DisplayFormat:=#,###,##0.00;
Columns[5].Title.Caption := Preço;
Columns[5].Width := 100;


ou


function TfrmConsultaProduto.colunas: String;
var
colunas :String;
begin
colunas := codigo,barras,nome,und_venda,preco_consumidor, qtd_em_estoque;
TFloatField(DMPrinc.CDSConsulta.FieldByName(preco_consumidor)).DisplayFormat:=#,###,##0.00;
Result := colunas;

Mas em nenhuma deu certo deu o mesmo erro...sitado
Responder

Gostei + 0

07/05/2012

William

Colega as vezes temos q aproveitar as vantagens que a IDE do delphi nos oferece, supondo que vc esteja usando um ClientDataSet existe uma propriedade para os fields chamada DisplayFormat, através do próprio ObjectInspector vc consegue inserir a formatação desejada para o campo monetário, e não necessita de codificação.

As vezes a simplicidade é o melhor caminho....
Responder

Gostei + 0

07/05/2012

Guilherme

Mas é como eu disse, é uma pesquisa genperica, meu dataset serve para muitas consultas
não tenho um dataset pra cada uma. Entende??? Este é o meu problema.

Se eu entrar no meu datset não existirá nenhum campo para que eu use o a Proriedade do DisplayFormat.
Eu monto as telas de consulta atraves de um metodo, como você pode ver no meu fonte no primeiro post.
Nas outras telas de consulta fiz exatamente daquela forma e funcionou...

Ainda no aguardo de uma solução
Responder

Gostei + 0

07/05/2012

William

Bom sendo assim tente trabalhar com o evento AfterOpen, como vc mencionou que usa o mesmo componente para várias consultas vai ter que fazer algumas checagens quando abrir para ver se existe o campo em questão.
Responder

Gostei + 0

07/05/2012

Guilherme

Pode me dar um exemplo de como ficaria, pois sou iniciante no Delphi.
Responder

Gostei + 0

07/05/2012

Joel Rodrigues

Considerando o seu exemplo, tente alterar para a seguinte forma:
Columns[5].FieldName := preco_consumidor;
TFloatField(DMPrinc.CDSConsulta.Fields[5]).DisplayFormat:=´#,###,##0.00´;
Columns[5].Title.Caption := Preço;
Columns[5].Width := 100;
Responder

Gostei + 1

07/05/2012

Guilherme

Ainda não deu certo............ Continua 9,9 onde seria 9,99
O que mais posso Fazer???
Responder

Gostei + 0

07/05/2012

William

O jeito é apelar, debuga a aplicação assim quando entrar nesse bloco de código vc verifica se está sendo passado os valores corretos.
Responder

Gostei + 0

07/05/2012

William

Colega usa o FormatFloat();
Responder

Gostei + 0

07/05/2012

Guilherme

Ok vou tentar e retorno o resultado pra você...obrigado pela atenção!!!
Responder

Gostei + 0

07/05/2012

Guilherme

Colega usa o FormatFloat();


testei da seguinte forma sem sucesso:

FormatFloat(###,##0.00,CDSConsulta.FieldByName(preco_consumidor).AsFloat);
Responder

Gostei + 0

07/05/2012

Guilherme

Resolvido, usei este comando mais nao depois da grid montada, mas sim na hora
que eu faço o selct no banco.
Deu certinho obrigado a todos pela atenção, em meu primeiro posto....Otima semana a Todos.
Responder

Gostei + 0

07/05/2012

Eniorm

eu formato a celula do grid assim: R$ ###,###,##0.00
sempre funciona como esperado. Se não quiser o R$ é só tirar da string.

Uso isso também exibição formatada de DBEdit, ou no caso do Jedi que eu uso, o JvDBCalcEdit
Responder

Gostei + 0

07/05/2012

William

Tá quase lá, vc tem q atribuir o valor.
Coluna(DBGrid) := formatfloat(R$ #####,cds.value);
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar