none
Validación de un CheckBox en un DataGridView RRS feed

  • Pregunta

  • Buenas a todos, quisiera una ayuda por favor, me gustaría saber un código para poder validar en un datagridview ya  que al momento de seleccionar mi checkbox principal, en mi datagridview aparecen más checkbox, y por ejemplo selecciono uno del datagridview y presiono el botón eliminar y se elimina, pero por ejemplo selecciono mi checkbox principal, luego se activan o aparecen los del datagridview pero no selecciono ninguno y cuando presiono el botón eliminar igual me sale si quiero eliminar y doy aceptar y no pasa nada pero quisierano quiero que salga eso,  que me salga un mensaje o alerta diciéndome que faltó seleccionar los checkbox del datagridview. Agradecería mucho la ayuda. 


    En pocas palabras:

    Cuando no selecciono los del datagridview y presiono el botón eliminar que está más arriba, igual me pregunta si quiero eliminar y acepto y no pasa nada por eso quisiera validar para que me diga que me faltó seleccionar los checkbox del datagridview.

    viernes, 25 de noviembre de 2016 3:46

Respuestas

  • Hola HenryFo,

    Puedes ayudarte con Linq using System.Linq;

    private void btnEliminar_Click(object sender, EventArgs e)
    {
        bool seleccionados = dataGridView1.Rows.OfType<DataGridViewRow>().
                            Any(x => Convert.ToBoolean(x.Cells["MiColumnaCheck"].Value) == true);
    
        if (!seleccionados)  //Si es false
        {
            MessageBox.Show("Debe de seleccionar por lo menos una fila.");
            return;  //Salimos....
        }
    
        //Hay una fila o filas...
        MessageBox.Show("Eliminando...");
    }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 25 de noviembre de 2016 3:56
  • HenryFo,

    Te recomiendo habilitar el botón únicamente cuando haya una o varias filas marcadas (checked), no tiene sentido tener el botón habilitado si no permitirás realizar la acción. 

    private void Form1_Load(object sender, EventArgs e)
    {
    	btnEliminar.Enabled = false; //botón deshabilitado por defecto
    }

    Según se realice una o varias marcas se habilitará/deshabilitará el botón:

    private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
    	if (dataGridView1.IsCurrentCellDirty)
    		dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
    
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    	if (dataGridView1.Columns[e.ColumnIndex].Name == "ColCheckBox")
    		btnEliminar.Enabled = dataGridView1.Rows.OfType<DataGridViewRow>().
    				Any(x => (Boolean)(x.Cells["ColCheckBox"].Value));
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 25 de noviembre de 2016 4:27

Todas las respuestas

  • Hola HenryFo,

    Puedes ayudarte con Linq using System.Linq;

    private void btnEliminar_Click(object sender, EventArgs e)
    {
        bool seleccionados = dataGridView1.Rows.OfType<DataGridViewRow>().
                            Any(x => Convert.ToBoolean(x.Cells["MiColumnaCheck"].Value) == true);
    
        if (!seleccionados)  //Si es false
        {
            MessageBox.Show("Debe de seleccionar por lo menos una fila.");
            return;  //Salimos....
        }
    
        //Hay una fila o filas...
        MessageBox.Show("Eliminando...");
    }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 25 de noviembre de 2016 3:56
  • HenryFo,

    Te recomiendo habilitar el botón únicamente cuando haya una o varias filas marcadas (checked), no tiene sentido tener el botón habilitado si no permitirás realizar la acción. 

    private void Form1_Load(object sender, EventArgs e)
    {
    	btnEliminar.Enabled = false; //botón deshabilitado por defecto
    }

    Según se realice una o varias marcas se habilitará/deshabilitará el botón:

    private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
    	if (dataGridView1.IsCurrentCellDirty)
    		dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
    
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    	if (dataGridView1.Columns[e.ColumnIndex].Name == "ColCheckBox")
    		btnEliminar.Enabled = dataGridView1.Rows.OfType<DataGridViewRow>().
    				Any(x => (Boolean)(x.Cells["ColCheckBox"].Value));
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 25 de noviembre de 2016 4:27