none
Validar columna checkbox en datagridview RRS feed

  • Pregunta

  • Hola, buenas tardes, tengo varios textbox en mi formulario y un datagridview con varias columnas tipo checkbox y un botónGUARDAR, inicialmente el botón tiene su propiedad ENABLED = FALSE, y solo quiero que cambie su propiedad a true cuando todos los textbox estén llenos y por lo menos se haya seleccionado una celda checkbox del datagridview.

    Tengo el siguiente método:

     private void ValidarControlesLlenos()
     {
           btnGuardar.Enabled = ((txtEstudiante.Text.Trim() != string.Empty) && (txtNumeroTarjeta.Text.Trim() != string.Empty)           && (txtHorasPactadas.Text.Trim() != string.Empty) && (txtCarrera.Text.Trim() != string.Empty))

    }

      Este método lo llamo en cada uno de los textbox en su evento TextChanged, solo me falta validar lo del datagridview de columna tipo checkbox y en que evento del datagridview incluyo este método.     

    Cualquier ayuda estaré muy agradecido.

                           
    martes, 21 de noviembre de 2017 16:21

Respuestas

  • Lo único que necesitas es extender la expresión de evaluación, no necesitas complicarte tanto.

    private void dgvHorarioPasante_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    	if (e.ColumnIndex == 2 || e.ColumnIndex == 3 || e.ColumnIndex == 4 )
    	{
    		IsCheck = dgvHorarioPasante.Rows.OfType<DataGridViewRow>().
    			Any(x => Convert.ToBoolean(x.Cells[2].Value) ||
    				Convert.ToBoolean(x.Cells[3].Value) ||
    				Convert.ToBoolean(x.Cells[4].Value));
    		ValidarControlesLlenos();
    	}            
    }

    • Marcado como respuesta JCORBETTO martes, 21 de noviembre de 2017 18:50
    martes, 21 de noviembre de 2017 18:42

Todas las respuestas

  • Por ejemplo:

    private void ValidarControlesLlenos()
    {
    	bool IsCheck = dataGridView1.Rows.OfType<DataGridViewRow>().
    		Any(x => Convert.ToBoolean(x.Cells["ColCheck"].Value));
    
    	btnGuardar.Enabled = IsCheck && (...);
    }

    martes, 21 de noviembre de 2017 17:06
  • Gracias Willams por responder, y el método en que evento del datagridview lo ejecuto?

    Gracias de antemano por la ayuda prestada

    martes, 21 de noviembre de 2017 17:40
  • Considera el momento en que se produce el evento 'CellValueChanged', de hecho hay un hilo que aperturaste días atrás con un caso similar que puede servirte nuevamente.

    Habilitar botón al seleccionar checkbox

    martes, 21 de noviembre de 2017 17:52
  • Willams gracias por responder, probé el código y tengo un problema, en el datagridview tengo 7 columnas de tipo checkbox, ese código solo es para una columna, trate de adaptarlo para las otras columnas pero no encuentre el efecto deseado:

     private void dgvHorarioPasante_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                if (e.ColumnIndex == 2) 
                {
                    IsCheck = dgvHorarioPasante.Rows.OfType<DataGridViewRow>().
                        Any(x => Convert.ToBoolean(x.Cells[e.ColumnIndex].Value));
                    ValidarControlesLlenos();
                }

                if (e.ColumnIndex == 3)
                {
                    IsCheck = dgvHorarioPasante.Rows.OfType<DataGridViewRow>().
                        Any(x => Convert.ToBoolean(x.Cells[e.ColumnIndex].Value));
                    ValidarControlesLlenos();
                }

                if (e.ColumnIndex == 4)
                {
                    IsCheck = dgvHorarioPasante.Rows.OfType<DataGridViewRow>().
                        Any(x => Convert.ToBoolean(x.Cells[e.ColumnIndex].Value));
                    ValidarControlesLlenos();
                }

    }

    El código me funciona a medias, doy check en una casilla de una columna se activa el botón, después doy ckech en otra casilla de otra columna y el botón sigue activado, hasta ahí todo bien, pero al deschequear uno de los check que están activos se desactiva el botón aun estando chequeado un checkbox.

    Llevo rato dando vueltas en este ejercicio, cualquier ayuda es bienvenida.

     

    martes, 21 de noviembre de 2017 18:25
  • Lo único que necesitas es extender la expresión de evaluación, no necesitas complicarte tanto.

    private void dgvHorarioPasante_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    	if (e.ColumnIndex == 2 || e.ColumnIndex == 3 || e.ColumnIndex == 4 )
    	{
    		IsCheck = dgvHorarioPasante.Rows.OfType<DataGridViewRow>().
    			Any(x => Convert.ToBoolean(x.Cells[2].Value) ||
    				Convert.ToBoolean(x.Cells[3].Value) ||
    				Convert.ToBoolean(x.Cells[4].Value));
    		ValidarControlesLlenos();
    	}            
    }

    • Marcado como respuesta JCORBETTO martes, 21 de noviembre de 2017 18:50
    martes, 21 de noviembre de 2017 18:42
  • Gracias Willams, funcionó perfecto, te lo agradezco mucho
    martes, 21 de noviembre de 2017 18:51