Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Como formatar valores no DBGrid?


Duduh_Capixaba

Pergunta

Olá senhores! Eu vi em um dos posts do forum que o código EditMask formata valores de um Grid. Tentei fazer no meu projeto, mas o Grid continua do mesmo jeito. Eis meu código:

DBGrid1.Fields[8].EditMask := '0.00';

Após a execução do código não acontece nada, tipo, um valor "5" deveria aparecer como "5,00", certo?! Eu tenho que colocar algum outro código depois do EditMask, tipo um Refresh ou algo assim?! Já tentei, mas tb não funcionou.

A coluna 8 recebe valores numéricos reais, e eu gostaria de formatá-la via código, pois o mesmo Grid recebe dados de várias tabelas diferentes.

Editado por Duduh_Capixaba
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0
Após a execução do código não acontece nada, tipo, um valor "5" deveria aparecer como "5,00"

alguns exemplos de formatação de strings para um stringgrid

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   StringGrid1.Cells[1,1] := Format('%8.2f',[123.50]);
   StringGrid1.Cells[1,2] := Format('%8.2f',[5.]);
   StringGrid1.Cells[1,3] := Format('%8.2f',[0.5]);
   StringGrid1.Cells[1,4] := Format('%m',[1110.5]);

   StringGrid1.Cells[2,1] := Formatfloat('#,##0.00',(123.50));
   StringGrid1.Cells[2,2] := Formatfloat('0.00',(5));
   StringGrid1.Cells[2,3] := Format('%*.*f',[6,2,0.5]);
   StringGrid1.Cells[2,4] := Formatfloat('#,##0.00',(1235.50));
end;

OBS: para o DBGrid no clientedataset (de 2 clicks no clientdtaset para vizualizar os campos da sua tabela) é melhor usar a propriedade DisplayFormat = ,0.00;-,0.00 e a propriedade EditFormat = ,0.00;-,0.00 .... é mais prático do que

DBGrid1.Fields[8].EditMask := '!999.99;1;_';

abraço

Editado por Jhonas
Link para o comentário
Compartilhar em outros sites

  • 0
Eu vi em um dos posts do forum que o código EditMask formata valores de um Grid. Tentei fazer no meu projeto, mas o Grid continua do mesmo jeito. Eis meu código:

DBGrid1.Fields[8].EditMask := '0.00';
Após a execução do código não acontece nada, tipo, um valor "5" deveria aparecer como "5,00", certo?! Eu tenho que colocar algum outro código depois do EditMask, tipo um Refresh ou algo assim?! Já tentei, mas tb não funcionou. A coluna 8 recebe valores numéricos reais, e eu gostaria de formatá-la via código, pois o mesmo Grid recebe dados de várias tabelas diferentes.
Este item, como sempre, tem relação com a interpretação incorreta dos componentes utilizados. Como sempre digo, o DBGrid apenas mostra os dados provenientes de um DataSet, e sendo assim, é na definição dos campos deste dataset que estas configurações devem ser feitas. Quando você acessa a propriedade Fields[<index>], nada mais está fazendo do que acessar o field associado a coluna <index> que corresponde ao field do dataset que você associou ao DBGrid. A propriedade EditMask, como diz o seu nome, é a máscara de edição, ou seja, serve para formatar a entrada de dados. Para formatar os dados na apresentação, ou seja, para definir como os dados serão mostrados você deve utilizar uma outra propriedade: DisplayFormat (observe que o nome já diz tudo). É importante observar que, se você tem o dataset com os campos (Fields) adicionados a ele, é boa prática inicializar estas duas propriedades, já que, indiferente de você utilizar o dataset em um DBGrid ou com DBEdit's, em algum momento você precisará entrar com os dados ou mostrá-los.
DBGrid1.Fields[8].EditMask := '0.00';
DBGrid1.Fields[8].Display := '0.00';

apesar da aparência ser a mesma, neste exemplo, a mascara de formatação segue as descrições (caracteres de formato) do tipo TEditMask, enquanto que a formatação de apresentação segue sua própria: DisplayFormat. Qualquer dúvida neste sentido, procure no help do Delphi por elas.

Como o Jhonas disse, e reforço acima, é mais prático você configurar estas propriedades nos fields do dataset em design-time.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

hum...sakei agora! é porque eu programo em VB tb, e lá a gente configura a máscara de outra forma.

eu queria resolver isso por código e não em design-time, pois o projeto fica meio que "amarrado", sei lá, gosto mais de código. mas vou testar aqui as duas maneiras e qualquer coisa volto a postar. obrigado a vocês pelas respostas.

Link para o comentário
Compartilhar em outros sites

  • 0

Duduh_Capixaba, eu coloquei o exemplo errado para uso da propriedade Fields do DBGrid:

DBGrid1.Fields[8].EditMask := '0.00';

DBGrid1.Fields[8].DisplayFormat := '#,##0.00';

Apenas lembrando que esta atribuição só precisa ser ser feita uma única vez. Então, veja lá onde você está pondo esta inicialização.

Talvez seja o caso de você dar mais detalhes de como você está tratando isso. Por exemplo:

- você adicionou os campos ao seu dataset?

- você adicionou os campos ao seu DBGrid ou eles ficam disponíveis apenas após aberto o dataset?

- Em que momento você atribui estas propriedades?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Não esquente com o exemplo, eu sei como criar formatos customizados. O meu problema é o segundo que você citou, eu não adicionei os campos ao DataSet nem ao DBGrid, pois eles só ficam disponíveis depois que abro o DataSet via código.

Eu já desisti, fiz pelo modo mais fácil...adicionei vários ADOTable e formatei os campos direto neles.

Talvez uma outra hora, com mais calma, eu tente via código. Sei que tem jeito, é só parar pra pensar um pouco. Mas vlw pela ajuda.

Editado por Duduh_Capixaba
Link para o comentário
Compartilhar em outros sites

  • 0
Não esquente com o exemplo, eu sei como criar formatos customizados. O meu problema é o segundo que você citou, eu não adicionei os campos ao DataSet nem ao DBGrid, pois eles só ficam disponíveis depois que abro o DataSet via código.

Eu já desisti, fiz pelo modo mais fácil...adicionei vários ADOTable e formatei os campos direto neles.

Talvez uma outra hora, com mais calma, eu tente via código. Sei que tem jeito, é só parar pra pensar um pouco. Mas vlw pela ajuda.

Bom eu uso assim para mostrar formatado no meu grid,

Na Query que faço a instruçao Sql eu uso o Evento AfterOpen, mas se você uso o ClientDataSet pode usar nele tbém tem o mesmo evento lá:

TFloatField(NomeDaQueryouDataSet.FieldByName('NomeDoCampoNoBancoDeDadosDaTabelaAReceberAFormataçao')).DisplayFormat := 'R$ #,##0.00';

Link para o comentário
Compartilhar em outros sites

  • 0

certinho, é isso mesmo! eu tinha dois problemas: não sabia qual evento usar e tb não estava usando a instrução correta. agora foi :) vlw Robinho!

-----------------------------

Edição:

tava testando aqui e vi que não é necessário o evento AfterOpen. você poder simplesmente colocar a instrução de edição logo após a instrução de abertura do DataSet. os dois modos funcionam. vlw!

Editado por Duduh_Capixaba
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite!

Eu tenho um form com o DBGrid e os DBEdits relacionados. Coloquei a formatação do evento AfterOpen e o DBEdit foi formatado certinho, porém no DBGRID não mudar nada, o que estou fazendo de errado? Sou iniciante. Adicionei os fields da Query também, fui na coluna de valor, coloquei a formatação em DisplayFormat e nada...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...