IFormattable: Formatando objetos

Salve desenvolvedores,

muitas vezes, precisamos formatar dados, seja num GridView ou para apresentar ao usuário e a sintaxe conhecia é a seguinte: {0:[Formato][Qtde. Casas Decimais]}. Para conhecer os formatos de número e valor, acesse o artigo do colega Israel Aéce.

Aqui, iremos justamente criar o nosso formarto e para a felicidade, o .NET oferece a interface IFormattable que recebe o método ToString, onde é invocado automáticamente pelo .NET ao chamarmos aquela formatação espefícica.

Iremos então, criar uma classe única de formatação. Se você quiser, pode separar cada classe CPF, CNPJ, Telefone, etc… no Namespace Formatacao.

Vamos a criação da classe:

using System;

///


/// Classe para formatação de dados.
///

public class Formatacao : IFormattable
{
private string _texto;

public Formatacao(string texto)
{
_texto = texto;
}

public string ToString(string format, IFormatProvider formatProvider)
{
// Garantimos que não está entrando caracteres a mais.
_texto = _texto.Replace(”-”, “”).Replace(”/”, “”).Replace(”.”, “”);

if (format == “CNPJ”)
return string.Format(@”{0:00\.000\.000\/0000\-00}”, Convert.ToDouble(_texto));
else if (format == “CPF”)
return string.Format(@”{0:000\.000\.000\-00}”, Convert.ToInt32(_texto));

return _texto;
}

public override string ToString()
{
return ToString(null, null);
}
}

Pronto… simples, não?

Agora, para apresentarmos ao usuário, basta adicionarmos o código:

Formatacao formataNumero = new Formatacao(”12345678912″);
Response.Write(string.Format(”CPF: {0:CPF}”, formataNumero));

formataNumero = new Formatacao(”1234567000134″);
Response.Write(string.Format(”CNPJ: {0:CNPJ}”, formataNumero));

E o resultado:

CPF: 123.456.789-12
CNPJ: 01.234.567/0001-34

abraços,

Enviar por e-mail. Hits para esta publicação: 878.

5 Comentários »

  1. BrunoKenj disse,

    23 de Fevereiro de 2007 @ 13:23

    Valeu Márcio, por ter apresentado.

  2. Lucas Campos disse,

    23 de Fevereiro de 2007 @ 13:23

    Muito bom…
    Com certeza isso é um dos vários facilitadores que o .Net nos oferece!
    É isso aew!

    Imagine Cup 2007, “é nois”!

    Abraços!

  3. BrunoKenj disse,

    23 de Fevereiro de 2007 @ 13:37

    O IFormatProvider é para os casos de Culturas diferentes… nesse caso do exemplo, o retorno dele é sempre nulo.

  4. Leandro disse,

    24 de Março de 2008 @ 11:56

    Têm como usar isso em um grid, boudcolunm (or exemplo), pois no meu caso estou usando essa classe, mas com um templatecolunm chamando uma função no meu code-behind. caso seja possível utilizar em boundcoluns, gostaria de saber como fazer. abraço.

  5. Edivaldo Machado disse,

    5 de Julho de 2008 @ 09:35

    cara esse teu exemplo ta furado
    em vez de public string ToString(string format, IFormatProvider formatProvider)
    poderia ser public string ToString()
    vc não esta utilizando mesmo os parametros
    “string format, IFormatProvider formatProvider”
    e sim o valor do construtor para fazer a formatação

RSS para comentários nesta publicação · URI para link desta publicação:

Deixe um Comentário