Principales respuestas
Activar/Desactivar CheckBox de una columna DataGridview

Pregunta
-
Hola
Estoy trabajando en una aplicación Windows Forms tengo un objeto DGV el cual tiene una columna de Checkbox la grilla la pueblo de datos por medio de una lista enlazada a datos.
La lista solo me trae los datos del Id y Descripción están mapeada a la propiedad PropertyName de las columnas de DGV, el problema es que cuando le doy check a las casillas siempre están en value = null no me marca la viñeta o palomita en la casilla.
Muestro código
private void dgvIdentificacion_CellValueChanged(object sender, DataGridViewCellEventArgs e) { ////Solo se trabaja ante los cambios en la columna de los checkbox //// if (dgvIdentificacion.Columns[e.ColumnIndex].Name == "colChk") { //Se toma la fila seleccionada // DataGridViewRow row = dgvIdentificacion.Rows[e.RowIndex]; //Se selecciona la celda del checkbox // DataGridViewCheckBoxCell cellSelecion = row.Cells["colChk"] as DataGridViewCheckBoxCell; //Se valida si esta checkeada // if (cellSelecion != null && !(bool)cellSelecion.Value) { var mensaje = $"Evento CellValueChanged.\n\nSe ha seleccionado, \nDescripción: {row.Cells["colIdenDescripcion"].Value}"; MessageBoxEx.EnableGlass = false; MessageBoxEx.Show(mensaje, StrTipoIdentificación.NameEntity, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } private void dgvIdentificacion_CellContentClick(object sender, DataGridViewCellEventArgs e) { //Detecta si se ha seleccionado el header de la grilla // if (e.RowIndex == -1) return; var elementos = new List<TipoIdentificacion>(); if (dgvIdentificacion.Columns[e.ColumnIndex].Name == "colChk") { //Se toma la fila seleccionada // DataGridViewRow row = dgvIdentificacion.Rows[e.RowIndex]; //Se selecciona la celda del Checkbox // DataGridViewCheckBoxCell cellSelecion = row.Cells["colChk"] as DataGridViewCheckBoxCell; if (cellSelecion?.Value != null) { if (Convert.ToBoolean(row.Cells["colChk"].Value)) { var model = new TipoIdentificacion() { TipoIdentificacionId = Convert.ToInt32(row.Cells["colIdenId"].Value), Nombre = Convert.ToString(row.Cells["colIdenDescripcion"].Value) }; elementos.Add(model); } if (Convert.ToBoolean(cellSelecion.Value)) { var mensaje = $"Evento CellContentClick.\n\nSe ha seleccionado, \nDescripción: {row.Cells["colIdenDescripcion"].Value}"; MessageBoxEx.EnableGlass = false; MessageBoxEx.Show(mensaje, StrTipoIdentificación.NameEntity, MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (Convert.ToBoolean(row.Cells["colChk"].Value) == false) { var model = new TipoIdentificacion() { TipoIdentificacionId = Convert.ToInt32(row.Cells["colIdenId"].Value), Nombre = Convert.ToString(row.Cells["colIdenDescripcion"].Value) }; elementos.Add(model); } var mensaje = $"Evento CellContentClick.\n\nSe ha quitado la seleccionado, \nDescripción: {row.Cells["colIdenDescripcion"].Value}"; MessageBoxEx.EnableGlass = false; MessageBoxEx.Show(mensaje, StrTipoIdentificación.NameEntity, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } } private void dgvIdentificacion_CurrentCellDirtyStateChanged(object sender, EventArgs e) { if (dgvIdentificacion.IsCurrentCellDirty) dgvIdentificacion.CommitEdit(DataGridViewDataErrorContexts.Commit); }
Si no me equivoco cuando selecciono una casilla debería llamar al evento CurrentCellDirtyChanged y después a CellValueChanged y por ultimo a CellContentClick.
Lo que pasa es que primero llama a CellValueChanged y después a CellContentClick y nunca llama a CurrentCellDirtyChanged
Saludos!
Pedro Ávila
"El hombre sabio querrá estar siempre con quien sea mejor que él."
Lima - Perú- Editado Pedro Ávila sábado, 2 de junio de 2018 22:24
Respuestas
-
Si revisa estos ejemplos, verá cómo puede resolverse usando vinculación a datos. La solución tiene proyecto de Windows Forms y WPF.
Jose R. MCP
My GIT Repositories | Mis Repositorios GIT- Marcado como respuesta Pedro Ávila lunes, 4 de junio de 2018 18:23
Todas las respuestas
-
Si revisa estos ejemplos, verá cómo puede resolverse usando vinculación a datos. La solución tiene proyecto de Windows Forms y WPF.
Jose R. MCP
My GIT Repositories | Mis Repositorios GIT- Marcado como respuesta Pedro Ávila lunes, 4 de junio de 2018 18:23
-
-