none
Aplicar uma máscara em um DataGridView (C# - Windows Forms) em tempo de execução RRS feed

  • Pergunta

  • Olá pessoal, existe a possibilidade de se aplicar uma máscara em uma célula de um datagrid em tempo de execução?

    É que tenho um cadastro com 3 tipos de contato: TELEFONE, CELULAR e E-MAIL. eu carrego um DataTable e alimento o datagrid com ele... Só que preciso levar em consideração o tipo de contato na hora de setar  a célula correspondente:

    Se for 1 - TELEFONE, setar o campo contato para máscara '(00)0000-0000'

    Se for 2 - CELULAR, setar o campo contato para máscara   '(00)00000-0000'

    Se for 3 - E-MAIL, setar o campo contato para não usar máscara

    //Carregamento do DataGrid

    public void CarregarDataGridContato(int pIDPessoa)
            {
                PessoaContatoBLL pessoaContatoBLL = new PessoaContatoBLL();           
                dgContato.DataSource = pessoaContatoBLL.ConsultarPessoaContatoTodos(pIDPessoa);            
                    
            }



    domingo, 13 de março de 2016 18:14

Respostas

  • Jalber,

    teve dificuldades em aplicar aquela solução do link que te passei ?

    Olha esse código e toma como exemplo, acabei de fazer e está funcionando perfeitamente, tem um dataGridView na tela.

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            class Contatos
            {
                public string Tipo { get; set; }
                public string Contato { get; set; }
                public string Ramal { get; set; }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                var list = new List<Contatos>()
                {
                    new Contatos {Tipo = "TELEFONE", Contato = "8599999999", Ramal = "12"},
                    new Contatos {Tipo = "CELULAR", Contato = "85989999999", Ramal = "12"},
                    new Contatos {Tipo = "EMAIL", Contato = "teste@teste.com.br", Ramal = "12"},
                };
                var bindingList = new BindingList<Contatos>(list);
                var source = new BindingSource(bindingList, null);
                dataGridView1.DataSource = source;
            }
    
            private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                if (e.ColumnIndex == 1 && e.RowIndex != dataGridView1.NewRowIndex)
                {
                    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value.ToString() == "TELEFONE")
                        e.Value = string.Format("{0:(##) ####-####}", Int64.Parse(e.Value.ToString()));
                    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value.ToString() == "CELULAR")
                        e.Value = string.Format("{0:(##) #####-####}", Int64.Parse(e.Value.ToString()));
                }
    
            }
    
        }
    
    Att,


    Antero Marques

    • Marcado como Resposta Jalber Romano terça-feira, 15 de março de 2016 00:04
    segunda-feira, 14 de março de 2016 00:12

Todas as Respostas

  • Jalber,

    teve dificuldades em aplicar aquela solução do link que te passei ?

    Olha esse código e toma como exemplo, acabei de fazer e está funcionando perfeitamente, tem um dataGridView na tela.

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            class Contatos
            {
                public string Tipo { get; set; }
                public string Contato { get; set; }
                public string Ramal { get; set; }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                var list = new List<Contatos>()
                {
                    new Contatos {Tipo = "TELEFONE", Contato = "8599999999", Ramal = "12"},
                    new Contatos {Tipo = "CELULAR", Contato = "85989999999", Ramal = "12"},
                    new Contatos {Tipo = "EMAIL", Contato = "teste@teste.com.br", Ramal = "12"},
                };
                var bindingList = new BindingList<Contatos>(list);
                var source = new BindingSource(bindingList, null);
                dataGridView1.DataSource = source;
            }
    
            private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                if (e.ColumnIndex == 1 && e.RowIndex != dataGridView1.NewRowIndex)
                {
                    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value.ToString() == "TELEFONE")
                        e.Value = string.Format("{0:(##) ####-####}", Int64.Parse(e.Value.ToString()));
                    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value.ToString() == "CELULAR")
                        e.Value = string.Format("{0:(##) #####-####}", Int64.Parse(e.Value.ToString()));
                }
    
            }
    
        }
    
    Att,


    Antero Marques

    • Marcado como Resposta Jalber Romano terça-feira, 15 de março de 2016 00:04
    segunda-feira, 14 de março de 2016 00:12
  • Obrigado pelo retorno Antero. Tive sim... Fiz alguns ajustes, mas aquela maneira de se fazer é adaptada para uma situação onde ficam vários zeros e eles vão sendo substituídos e também a digitação começa da direita para a esquerda... No meu caso não ajudou muito não.

    Vou testar essa exemplo que você me passou e te retorno em breve. 

    Muito obrigado :)

    • Marcado como Resposta Jalber Romano terça-feira, 15 de março de 2016 00:04
    • Não Marcado como Resposta Jalber Romano terça-feira, 15 de março de 2016 00:04
    segunda-feira, 14 de março de 2016 16:29
  • Obrigado Antero, funcionou!!

    Obrigado.


    terça-feira, 15 de março de 2016 00:20