none
¿Como validar columna de dataGrid a que esta acepte solo numeros? c# RRS feed

  • Pregunta

  • ¿Como validar columna de dataGrid a que esta acepte solo numeros?

     

    private void dataGridView2_CurrentCellChanged(object sender, EventArgs e)

            {                      

                int valor = 0;

                foreach (DataGridViewRow filas in dataGridView2.Rows)

                {

                    valor += Convert.ToInt32(filas.Cells[0].Value);

                }

                label1.Text = valor.ToString();

            }

     

    Estoy tratando de validar que esta columna especifica del dataGrid acepte solo números, pero no sé cómo decirle eso… Normalmente cuando son textBox y cosas así lo hagan en el evento KeyPress asi…

      private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

            {

                if (Char.IsNumber(e.KeyChar) || e.KeyChar == (Char)Keys.Back)

                {

                    e.Handled = false;

                }

                else

                    e.Handled = true;

            }

     

    Pero aunque el dataGrid tiene evento KeyPress no se como referirme especificamente a esta columna… Es eso posible???

    Mil gracias de antemano a todos por su ayuda…


    viernes, 29 de enero de 2010 22:13

Respuestas

  • hola

    solo te falta un paso previo y es asignar el handler del evento keypress

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (DataGridView1.CurrentCell.ColumnIndex == 1)
        {

            TextBox txt = e.Control as TextBox;

            if (txt != null) {
                txt.KeyPress -= new KeyEventHandler(textBox1_KeyPress);
                txt.KeyPress += new KeyEventHandler(textBox1_KeyPress);
            }

        }
    }


    veras como al momento de editar la celda se valida que se ala columna con la cual quieres trabajar
    y luego la conviertes para asignar el handler del evento

    Nota, aqui se ha usado la columan 1, pero en tu caso debes poner la que estas queriendo validar, o puedes pooner varias si quieres


    otra alternativa que podrias aplciar es dejar que ingrese cualquier digito y luego loa validas

    Walkthrough: Validating Data in the Windows Forms DataGridView Control


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 29 de enero de 2010 23:33
  • hola

    si pero esa funcionalidad que suas para el textbox es la misam que usarias para la celda de la grilla

    solo que como habras visto cambia la forma en como asignas el evento
    debes trabajarlo antes con el evento que determina cuando la celda entra en edicion y recien alli adicionar el handler del evento

    pruebalo seguro que funciona

    por ahi si quieres separar las cosas puedes crear otro metodo de evento

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (DataGridView1.CurrentCell.ColumnIndex == 1)
        {

            TextBox txt = e.Control as TextBox;

            if (txt != null) {
                txt.KeyPress -= new KeyEventHandler(dataGridview_KeyPres s);
                txt.KeyPress += new KeyEventHandler(dataGridview_KeyPress );
            }

        }
    }


    private void dataGridview_KeyPress (object sender, KeyPressEventArgs e)
    {
        if (Char.IsNumber(e.KeyChar) || e.KeyChar == (Char)Keys.Back)
            e.Handled = false;
        else
            e.Handled = true;

    }


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta AdyIr domingo, 31 de enero de 2010 18:56
    sábado, 30 de enero de 2010 20:00

Todas las respuestas

  • hola

    solo te falta un paso previo y es asignar el handler del evento keypress

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (DataGridView1.CurrentCell.ColumnIndex == 1)
        {

            TextBox txt = e.Control as TextBox;

            if (txt != null) {
                txt.KeyPress -= new KeyEventHandler(textBox1_KeyPress);
                txt.KeyPress += new KeyEventHandler(textBox1_KeyPress);
            }

        }
    }


    veras como al momento de editar la celda se valida que se ala columna con la cual quieres trabajar
    y luego la conviertes para asignar el handler del evento

    Nota, aqui se ha usado la columan 1, pero en tu caso debes poner la que estas queriendo validar, o puedes pooner varias si quieres


    otra alternativa que podrias aplciar es dejar que ingrese cualquier digito y luego loa validas

    Walkthrough: Validating Data in the Windows Forms DataGridView Control


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 29 de enero de 2010 23:33
  • hola

    solo te falta un paso previo y es asignar el handler del evento keypress

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (DataGridView1.CurrentCell.ColumnIndex == 1)
        {

            TextBox txt = e.Control as TextBox;

            if (txt != null) {
                txt.KeyPress -= new KeyEventHandler(textBox1_KeyPress);
                txt.KeyPress += new KeyEventHandler(textBox1_KeyPress);
            }

        }
    }


    veras como al momento de editar la celda se valida que se ala columna con la cual quieres trabajar
    y luego la conviertes para asignar el handler del evento

    Nota, aqui se ha usado la columan 1, pero en tu caso debes poner la que estas queriendo validar, o puedes pooner varias si quieres


    otra alternativa que podrias aplciar es dejar que ingrese cualquier digito y luego loa validas

    Walkthrough: Validating Data in the Windows Forms DataGridView Control


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina



    Hola Leandro que tal... Osea por que lo pude entender aqui:
     txt.KeyPress -= new KeyEventHandler(textBox1_KeyPress);
     txt.KeyPress += new KeyEventHandler(textBox1_KeyPress);

    Estas usando el evento que yo te puse en el ejemplo, donde mostraba como usualmente yo hago eso con textBox...
    El problema es que eso fue solo un ejemplo mas yo no estoy usando esa funcion en la aplicacion, solo lo necesito en el dataGrid... Como haria??? Gracias por tu ayuda...
    sábado, 30 de enero de 2010 16:13
  • hola

    si pero esa funcionalidad que suas para el textbox es la misam que usarias para la celda de la grilla

    solo que como habras visto cambia la forma en como asignas el evento
    debes trabajarlo antes con el evento que determina cuando la celda entra en edicion y recien alli adicionar el handler del evento

    pruebalo seguro que funciona

    por ahi si quieres separar las cosas puedes crear otro metodo de evento

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (DataGridView1.CurrentCell.ColumnIndex == 1)
        {

            TextBox txt = e.Control as TextBox;

            if (txt != null) {
                txt.KeyPress -= new KeyEventHandler(dataGridview_KeyPres s);
                txt.KeyPress += new KeyEventHandler(dataGridview_KeyPress );
            }

        }
    }


    private void dataGridview_KeyPress (object sender, KeyPressEventArgs e)
    {
        if (Char.IsNumber(e.KeyChar) || e.KeyChar == (Char)Keys.Back)
            e.Handled = false;
        else
            e.Handled = true;

    }


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta AdyIr domingo, 31 de enero de 2010 18:56
    sábado, 30 de enero de 2010 20:00
  • hola

    si pero esa funcionalidad que suas para el textbox es la misam que usarias para la celda de la grilla

    solo que como habras visto cambia la forma en como asignas el evento
    debes trabajarlo antes con el evento que determina cuando la celda entra en edicion y recien alli adicionar el handler del evento

    pruebalo seguro que funciona

    por ahi si quieres separar las cosas puedes crear otro metodo de evento

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (DataGridView1.CurrentCell.ColumnIndex == 1)
        {

            TextBox txt = e.Control as TextBox;

            if (txt != null) {
                txt.KeyPress -= new KeyEventHandler(dataGridview_KeyPres s);
                txt.KeyPress += new KeyEventHandler(dataGridview_KeyPress );
            }

        }
    }


    private void dataGridview_KeyPress (object sender, KeyPressEventArgs e)
    {
        if (Char.IsNumber(e.KeyChar) || e.KeyChar == (Char)Keys.Back)
            e.Handled = false;
        else
            e.Handled = true;

    }


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Fino Leandro mil gracias, no lo he probado pero estoy seguro que debe funcionar... Gracias una vez mas amigo...
    domingo, 31 de enero de 2010 18:56
  • Saludos.

    he tratado de usar el codigo dado por Leandro Tuttini pero en esta parte:

                txt.KeyPress -= new KeyEventHandler(textBox1_KeyPress);
                txt.KeyPress += new KeyEventHandler(textBox1_KeyPress);

    sale este error:

    Ninguna sobrecarga correspondiente a 'dataGridView1_KeyPress' coincide con el 'System.Windows.Forms.KeyEventHandler' delegado   

     

    Me podrian ayudar.


    Sergio701
    • Editado Sergio701 viernes, 8 de octubre de 2010 16:49
    viernes, 8 de octubre de 2010 10:53
  • Saludos.

    he tratado de usar este codigo pero pero en esta parte:

                txt.KeyPress -= new KeyEventHandler(textBox1_KeyPress);
                txt.KeyPress += new KeyEventHandler(textBox1_KeyPress);

    sale este error:

    Ninguna sobrecarga correspondiente a 'dataGridView1_KeyPress' coincide con el 'System.Windows.Forms.KeyEventHandler' delegado   

     

    Me podrian ayudar.


    Sergio701

     

    Hola amigo si quieres validar que tu dataGrid acepte numeros creo que esto bastaría…

     

    // Estos codigos claro esta que van en los eventos del control dataGrid... Si los colocas fuera de los eventos claro esta que no haran nada...

    private void dataGridDatos_KeyPress(object sender, KeyPressEventArgs e)

            {

                // Donde el numero "4" es el numero de tu columna

                if (dataGridDatos.CurrentCell.ColumnIndex == 4)

                {

                    if (e.KeyChar == (char )Keys .Back || char .IsNumber(e.KeyChar))

                        e.Handled = false ;

                    else

                        e.Handled = true ;

                }

             }

     

            private void dataGridDatos_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

            {

                if (dataGridDatos.CurrentCell.ColumnIndex == 4)

                {

                    TextBox txt = e.Control as TextBox ;

                    if (txt != null )

                    {

                        txt.KeyPress -= new KeyPressEventHandler (dataGridDatos_KeyPress);

                        txt.KeyPress += new KeyPressEventHandler (dataGridDatos_KeyPress);

                    }

                }

            }

     

     

     

    Dejame dejarte otros ejemplo de validaciones… Pero este ocurre no cuando se escribe si no cuando tratas de cambiar de celda…

     

    Aquí por ejemplo valida que al tratar de cambiar de celda, dicha celda tenga un formato correcto en este caso de fecha…. “Aunque luego me di cuenta que era mas facil usar una expresion regular alli pero igual este trabaja bien”

     

    private void dataGridDatos_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)

            {

                if (dataGridDatos.Columns[e.ColumnIndex].Name == "fecha" && e.FormattedValue.ToString().Length > 0)

                {

                    string fecha = e.FormattedValue.ToString();

                    CultureInfo es = new CultureInfo ("en-US" );

                    DateTime dateValue;

     

                    if (!DateTime .TryParseExact(fecha, "dd-MM-yyyy" , es, DateTimeStyles .None, out dateValue))

                    {

                        lblMensaje.Text = "Formato de fecha incorrecto, asegurese de introducir el formato correcto. Ej.27-10-1988" ;

                        dataGridDatos.Rows[e.RowIndex].ErrorText = "Formato de fecha incorrecto" ;

                        e.Cancel = true ;

                    }

                }

            }

     

    Espero que te sea util…

     

    • Propuesto como respuesta AlexLander viernes, 8 de octubre de 2010 16:05
    viernes, 8 de octubre de 2010 15:23
  • exelente aporte men =)
    martes, 21 de febrero de 2012 19:42
  • ohhh era lo q andab buscando ... exelente aporte !!! :) :)
    jueves, 6 de junio de 2013 17:35
  • Buenas, creo que esto es mas sencillo, te fijas si al convertir a decimal da error, yo lo use en el CellEndEdit pero puedes usarlo en el KeyPeress.

    private void dataGridView2_CellEndEdit_1(object sender, DataGridViewCellEventArgs e)
            {
               decimal DocSelec = 0;
                try
                {
                            DocSelec = Convert.ToDecimal(dataGridView2.Rows[x].Cells[5].Value);                  
                }
                catch
                { 
                    dataGridView2.Rows[x].Cells[5].Value = 0; 
                }

    domingo, 12 de marzo de 2017 1:05
  • Muchisimas gracias, me salvaste!.



    • Propuesto como respuesta Mira en Oracle lunes, 13 de mayo de 2019 16:27
    miércoles, 28 de marzo de 2018 6:12