none
como identificar uma tecla em um evento private void XXXXCellValidating(object sender, DataGridViewCellValidatingEventArgs e) que nao possui KeyEventArgs e? RRS feed

Respostas

  • Veja se neste exemplo resolverá seu problema:

          bool _enterPressed = false;
    
            private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
            {
                string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText;
    
                ///Exemplo de validação para coluna nome
                if (_enterPressed)
                {
    
                    if (headerText.Equals("Nome"))
                    {
                        if (string.IsNullOrEmpty(e.FormattedValue.ToString()))
                        {
                            dataGridView1.Rows[e.RowIndex].ErrorText =
                                "Campo \"Nome\" não pode estar vazio";
                            e.Cancel = true;
                            dataGridView1.CancelEdit();
                            _enterPressed = true;
                        }
                    }
                }
                else
                {
                    e.Cancel = false;
                }
    
            }
    
    
            private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
                _enterPressed = false;
            }
    
            private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) =>
                {
    
                    if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                    {
                        _enterPressed = true;
                    }
                });
            }
    

    Espero ter ajudado!

    Um abraço!

    • Marcado como Resposta JuniorCL quinta-feira, 5 de abril de 2018 17:04
    quarta-feira, 4 de abril de 2018 12:49

Todas as Respostas

  • Amigo, bom dia ! Não entendi bem a sua dúvida.

    Você tem um DataGridView que estará preenchido, certo ? 

    Os dados que estão nele você vai validar clicando na primeira linha do DataGridView, e sair pressionando a tecla enter/TAB para validar os dados contidos em cada linha ?

    Pode me explicar melhor para poder lhe ajudar ...

    terça-feira, 3 de abril de 2018 13:18
  • vamos la...

    'em edição da celula'!! eu resolvo dar esc!!! como estou validando celula,  não deixa sair(pois a validação e para não ser vazio)!!

    gostaria c possivel somente validar a celula primeiramente for precionado ENTER ou TAB!!


    • Editado JuniorCL terça-feira, 3 de abril de 2018 14:08
    terça-feira, 3 de abril de 2018 13:58
  • Olá bom dia!

    Utilize este evento, assim quando pressionar "esc" irá remover os erros.

            private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
            }

    Um abraço!

    terça-feira, 3 de abril de 2018 14:14
  • Olá bom dia!

    Utilize este evento, assim quando pressionar "esc" irá remover os erros.

            private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
            }

    Um abraço!


    sim ja utilizo este evento mas nao deixa sair c nao digitar algo na celula nem fechar o formulario!!


    • Editado JuniorCL terça-feira, 3 de abril de 2018 14:29
    terça-feira, 3 de abril de 2018 14:27
  • acho q devo então criar uma string para fazer esse processo?!?!
    quarta-feira, 4 de abril de 2018 09:40
  • Veja se neste exemplo resolverá seu problema:

          bool _enterPressed = false;
    
            private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
            {
                string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText;
    
                ///Exemplo de validação para coluna nome
                if (_enterPressed)
                {
    
                    if (headerText.Equals("Nome"))
                    {
                        if (string.IsNullOrEmpty(e.FormattedValue.ToString()))
                        {
                            dataGridView1.Rows[e.RowIndex].ErrorText =
                                "Campo \"Nome\" não pode estar vazio";
                            e.Cancel = true;
                            dataGridView1.CancelEdit();
                            _enterPressed = true;
                        }
                    }
                }
                else
                {
                    e.Cancel = false;
                }
    
            }
    
    
            private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;
                _enterPressed = false;
            }
    
            private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) =>
                {
    
                    if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                    {
                        _enterPressed = true;
                    }
                });
            }
    

    Espero ter ajudado!

    Um abraço!

    • Marcado como Resposta JuniorCL quinta-feira, 5 de abril de 2018 17:04
    quarta-feira, 4 de abril de 2018 12:49
  • Veja se neste exemplo resolverá seu problema:

     
                DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) =>
                {
    
                    if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                    {
                        _enterPressed = true;
                    }
                });
    

    Espero ter ajudado!

    Um abraço!

    amigo como estou aprendendo ainda essa ferramenta extraordinária C# poderia me explicar essa parte do código?(Obs. sou clippeiro!!)
    quinta-feira, 5 de abril de 2018 13:21
  • Olá bom dia amigo,

    Criei um PreviewKeyDownEventHandler utilizando expressões lambda (funções anonimas) como instancia de delegate. Ex:

    https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

    Ou seja, ao invés de eu ter criado um outro método assim:

            private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler(this.Control_PreviewKeyDownEventHandler);
            }
    
            private void Control_PreviewKeyDownEventHandler(object sender, PreviewKeyDownEventArgs ev)
            {
    
                if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                {
                    _enterPressed = true;
                }
            }

    Preferi criar tudo dentro de um único método assim:

          DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) =>
                {
    
                    if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                    {
                        _enterPressed = true;
                    }
                });

    Espero ter ajudado!

    Um abraço!

    quinta-feira, 5 de abril de 2018 13:51
  • Olá bom dia amigo,

    Criei um PreviewKeyDownEventHandler utilizando expressões lambda (funções anonimas) como instancia de delegate. Ex:

    https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

    Ou seja, ao invés de eu ter criado um outro método assim:

            private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler(this.Control_PreviewKeyDownEventHandler);
            }
    
            private void Control_PreviewKeyDownEventHandler(object sender, PreviewKeyDownEventArgs ev)
            {
    
                if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                {
                    _enterPressed = true;
                }
            }

    Preferi criar tudo dentro de um único método assim:

          DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
                e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) =>
                {
    
                    if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab)
                    {
                        _enterPressed = true;
                    }
                });

    Espero ter ajudado!

    Um abraço!

       Obs. Complementando, vc deve primeiro criar o evento  "EditingControlShowing" no seu gridview.
    quinta-feira, 5 de abril de 2018 13:55