none
Formatar Datagrid RRS feed

  • Pergunta

  • Bom dia,

    Tenho um campo em uma tabela em um banco de dados no qual os dados de telefone estão salvas de várias maneiras, exemplo:

    (11) 33333333
    1133333333
    (11)3333-3333
    113333-3333
    11 33333333
    11 3333-3333

    Eu quero popular um DataGrid com estes dados de telefone e exportar para o excel em um formato só apenas, que seria este:

    (11) 33333333

    O problema é que eu não sei como fazer isso utilizando o DataGrid, alguém pode me ajudar?


    Obrigado!
    sexta-feira, 15 de janeiro de 2010 11:35

Respostas

  • Victor,

    O ideal seria tratar estes dados antes que eles fossem salvos no banco de dados.

    Mais de qualquer forma, creio que basta você tratar os dados que já estão no grid, fazendo um foreach nas rows deste Grid.

    private string TratarTelefone(string telefone)
            {
                // assim todos os telefone ficarão em uma só formatação: 1133333333
                string limparTelefone = telefone.Replace("(", string.Empty).Replace(")", string.Empty).Replace("-",string.Empty).Replace(" ", string.Empty);
                List<char> tratar = new List<char>();
                foreach (char carac in limparTelefone)
                {
                    tratar.Add(carac);
                }
                string telefoneTratado = string.Empty;
                tratar.Insert(0, '(');
                tratar.Insert(3, ')');
                tratar.Insert(8, '-');
                foreach (char str in tratar)
                {
                    telefoneTratado += str;
                }
                return telefoneTratado;
            }
            private void Form_Load(object sender, EventArgs e)
            {
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    string telefoneAtual = row.Cells["Telefone"].Value.ToString();
                    telefoneAtual = TratarTelefone(telefoneAtual)
    	       row.Cells["Telefone"].Value = telefoneAtual;            
                }
            }

    Creio que isto posso te ajudar.

    sexta-feira, 15 de janeiro de 2010 13:28
  • Você pode fazer é manipular o Evento CelFormating do seu Grid

            private void DGCadastro_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                if (this.DGCadastro.Columns[e.ColumnIndex].Name == "ColTelefone")
                {
                    if (e != null)
                    {
                        if (e.Value != null)
                        {
                            String telefone = e.Value.ToString();
                            telefone = telefone.Replace(" ","").Replace("-","");
                            MaskedTextBox msk = new MaskedTextBox("(99)00000000");
                            msk.Text = telefone.Trim();
                            e.Value = msk.Text;
                        }
                    }
                }
            }
    sexta-feira, 15 de janeiro de 2010 13:40
  • Cara,

    Faz um tratamento na sua base, pq vc vai ficar muito extenso tratar via código.
    Absm

    Wagner
    Wagner Araújo
    sexta-feira, 15 de janeiro de 2010 13:45
  • Como o Wagner disse, o cenário ideal é não deixar que estas informações sejam armazenadas no banco sem um formato padrão.
    sexta-feira, 15 de janeiro de 2010 13:52
  • Bruno,

    Eu trabalho em Contact Center, e as bases chegam todas ferradas e sem formato.. Antes da importação o Back-Office trata e eu só exibo o que vem do banco.
    Uma época tentamos fazer algo como  sugerido acima, mais vai chegar uma hora que vai ter milhares de linhas e ainda aparecerá errado na máscara.

    Abs,

    Wagner
    Wagner Araújo
    sexta-feira, 15 de janeiro de 2010 14:23

Todas as Respostas

  • Victor,

    O ideal seria tratar estes dados antes que eles fossem salvos no banco de dados.

    Mais de qualquer forma, creio que basta você tratar os dados que já estão no grid, fazendo um foreach nas rows deste Grid.

    private string TratarTelefone(string telefone)
            {
                // assim todos os telefone ficarão em uma só formatação: 1133333333
                string limparTelefone = telefone.Replace("(", string.Empty).Replace(")", string.Empty).Replace("-",string.Empty).Replace(" ", string.Empty);
                List<char> tratar = new List<char>();
                foreach (char carac in limparTelefone)
                {
                    tratar.Add(carac);
                }
                string telefoneTratado = string.Empty;
                tratar.Insert(0, '(');
                tratar.Insert(3, ')');
                tratar.Insert(8, '-');
                foreach (char str in tratar)
                {
                    telefoneTratado += str;
                }
                return telefoneTratado;
            }
            private void Form_Load(object sender, EventArgs e)
            {
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    string telefoneAtual = row.Cells["Telefone"].Value.ToString();
                    telefoneAtual = TratarTelefone(telefoneAtual)
    	       row.Cells["Telefone"].Value = telefoneAtual;            
                }
            }

    Creio que isto posso te ajudar.

    sexta-feira, 15 de janeiro de 2010 13:28
  • Você pode fazer é manipular o Evento CelFormating do seu Grid

            private void DGCadastro_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                if (this.DGCadastro.Columns[e.ColumnIndex].Name == "ColTelefone")
                {
                    if (e != null)
                    {
                        if (e.Value != null)
                        {
                            String telefone = e.Value.ToString();
                            telefone = telefone.Replace(" ","").Replace("-","");
                            MaskedTextBox msk = new MaskedTextBox("(99)00000000");
                            msk.Text = telefone.Trim();
                            e.Value = msk.Text;
                        }
                    }
                }
            }
    sexta-feira, 15 de janeiro de 2010 13:40
  • Cara,

    Faz um tratamento na sua base, pq vc vai ficar muito extenso tratar via código.
    Absm

    Wagner
    Wagner Araújo
    sexta-feira, 15 de janeiro de 2010 13:45
  • Como o Wagner disse, o cenário ideal é não deixar que estas informações sejam armazenadas no banco sem um formato padrão.
    sexta-feira, 15 de janeiro de 2010 13:52
  • Bruno,

    Eu trabalho em Contact Center, e as bases chegam todas ferradas e sem formato.. Antes da importação o Back-Office trata e eu só exibo o que vem do banco.
    Uma época tentamos fazer algo como  sugerido acima, mais vai chegar uma hora que vai ter milhares de linhas e ainda aparecerá errado na máscara.

    Abs,

    Wagner
    Wagner Araújo
    sexta-feira, 15 de janeiro de 2010 14:23
  • O problema foi que eu peguei a base de um outro programa e estou pegando os dados dela e inserindo na base de outro sistema, para fazer uma integração entre os dois.
    Vou tentar dessa maneira que vocês me disseram.

    Muito obrigado pela ajuda, quando eu testar, digo pra vocês o resultado.

    Abraçoss.
    sábado, 16 de janeiro de 2010 23:10