Aporte - Donación

Si el contenido te fue de utilidad puedes donar

PayPal. La forma rápida y segura de pagar en línea.

Blog Recent Posts

This Blog

Syndication

Search

Tags

News

Community

Email Notifications

Archives

Blogs recomendados

Sitios

Blog Archive List

Aporte - Donación

Si el contenido te fue de utilidad puedes donar

PayPal. La forma rápida y segura de pagar en línea.

 

DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged

Huston… teniamos un problema! Va yo era el del problema. Con un amigo del trabajo Pedro (flamante programador Clipper!) teniamos que realizar acciones en un winform en un control Datagridview con un Checkbox. Simple no? Pero cuando queriamos acceder por codigo al valor de la columna DataGridViewCheckBoxColumn CellValueChanged no teniamos el cambio actual.

Problema

Tenemos una grilla con una columna DataGridViewCheckBoxColumn

image

Para que cuando tengamos evento click en el check…

image

LO PODAMOS DETECTAR !!! Pense que era mas facil de lo que crei, pero por eso aqui esta este instructivo con las dos opciones:

Antes que nada… explicación de porque no podemos hacer simplemente…con los eventos como las otras celdas:
Pero si lo hacemos en el evento CellContentClick, no tendremos actualizado el valor del check 

Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    MsgBox("Estado: " & Me.DataGridView1.Rows(e.RowIndex).Cells("check").Value)

End Sub

(from MSDN…)CellContentClick: Para los clicks en DataGridViewCheckBoxCell este evento se produce antes de que cambie el valor de la casilla de verificación(…)

Si lo hacemos aqui CellValueChanged (que es donde deberiamos consultar por naturaleza) solo se produce cuando el usuario deja la celda actual. Esto sucede porque los cambios no se plasman hasta luego de ejecutar el evento CellEndEdit.

 

 

OPCION 1: La parte “ortodoxa”… cambiar el estado por nosotros mismos. Tenemos el control

Aqui la idea es cambiar la propiedad de esta columna DataGridViewCheckBoxColumn a ReadOnly

image 

image

Y en el evento CellContentClick, tendremos que ”artesanalmente” cambiar de estado… y alli si podremos recuperarlo.

Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

   If e.ColumnIndex = Me.DataGridView1.Columns.Item("check").Index Then
       Dim chkCell As DataGridViewCheckBoxCell = Me.DataGridView1.Rows(e.RowIndex).Cells("check")
       chkCell.Value = Not chkCell.Value
   End If

   MsgBox("Estado: " & EstadoCheck(e.RowIndex))

End Sub

(Nota: Aqui la columna checkbox se llama “check”, y el metodo EstadoCheck solo obtiene el estado del la columna con el check – para demo)

Entonces? Aqui es una forma ortodoxa de conseguir nuestro objetivo: “Tener un poco de control en el OnClick del checkbox en una columna DataGridViewCheckBoxColumn del Datagridview”

 

 

OPCION 2:  Tener control del cambio en el CheckBoxColumn: Evento CurrentCellDirtyStateChanged (cuando se cambia el estado de alguna celda)

Esta opcion es la recomendacion de MSDN asi que, aqui va…
La columna checkbox (DataGridViewCheckBoxColumn) la dejamos como esta… sin propiedad ReanOnly seteada.

En el evento CurrentCellDirtyStateChanged preguntamos si la celda actual tiene cambios sin confirmar (propiedad IsCurrentCellDirty)

Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
       If DataGridView1.IsCurrentCellDirty Then
           DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
       End If
   End Sub

         y alli si podremos consultar el valor… en el evento por naturaleza

Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

       MsgBox("Estado: " & EstadoCheck(e.RowIndex))

End Sub

 

 

Enlaces:

Published 15/7/2008 20:20 por José A. Fernández

Comparte este post:

Comentarios

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, August 06, 2008 8:15 PM

Hola, muy buen tip ...me sirvio mucho para implementarlo en un datagrid que estoy haciendo con bases de datos, pero me salta una pequeña duda...sobre el valor EstadoCheck, como se declara para que entregue el mismo valor de Me.DataGridView1.Rows(e.RowIndex).Cells("check").Value??? Gracias.

Cristian Ortiz

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, August 06, 2008 9:14 PM

Hola Cristian

Me alegro que te sirva el articulo.

La funcion EstadoCheck es una "ayuda" simplemente para tener el codigo mas claro, aqui te dejo la implementacion:

Private Function EstadoCheck(ByVal filaposicion As Integer) As Boolean        

       Return Me.DataGridView1.Rows(filaposicion).Cells("check").Value

End Function

Saludos.-

José A. Fernández

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Monday, September 08, 2008 11:40 AM

Hola, la verdad es que me servido muchisimo, la explicación que has puesto, porque estoy implementando una grid con un checkboxcolumn. Y ahora tengo otro pequeño  problema, a ver si me puedes dar alguna idea, porque a mi ya no me viene ninguna.

En la grid solo quiero que me muestre algunas de las filas de la columna checkbox, es decir, tengo 10 filas pero solo quiero que me muestre el check de las 3 primeras. Sabes como podria hacerlo? He intentado poner esas celdas con valor visible=false, pero visible es de solo lectura. Alguna idea?Espero que me puedas ayudar.

Saludos

Patricia

Patricia

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, September 26, 2008 10:17 PM

Execelente, justo lo que andaba buscando.

saludos y gracias

Felipe

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Sunday, October 19, 2008 6:33 AM

Excelente post gracias , estaba realizando un aplcicacion y me fue de mucha ayuda Gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Walther

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, November 26, 2008 12:52 AM

geniaaaaaaaal !!

gracias por compartir tus conocimientos...

me sirvio montones!

saludos...

marlene

# Saludos@ Friday, February 27, 2009 1:06 AM

Me fue muy util gracias.

Jose

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Thursday, April 09, 2009 4:05 PM

Excelente artículo. Es justo lo que estaba buscando. Probé de mil maneras y no le había encontrado la vuelta.

Muchas gracias por compartir.

Bob

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, May 15, 2009 6:40 PM

Hermano Muchisimas Gracias Excelente solucion

sebastian

# Saludos@ Monday, May 18, 2009 7:15 PM

Esta informacion en lo personal me fue bastante util, estuve en la busqueda de esta informcion y llegue al lugar preciso.

Gracias

Eduardo Programmer

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, June 02, 2009 11:33 PM

Muy buen ejemplo, busque en muchas páginas y ninguno fue tan claro.

Modifique un poco el ejemplo para ajustarlo a mi necesidad:

private void dtgEnsayos_CellContentClick(object sender, DataGridViewCellEventArgs e)

       {

           if(e.ColumnIndex == this.dtgEnsayos.Columns[0].Index)

               {

                   DataGridViewCheckBoxCell chkCelda = (DataGridViewCheckBoxCell)this.dtgEnsayos.Rows[e.RowIndex].Cells[0];

                   if (Convert.ToBoolean(chkCelda.Value)==true)

                   {

                       chkCelda.Value = false;

                       dtgEnsayos.Rows[e.RowIndex].Selected = false;

                   }

                   else

                   {

                       chkCelda.Value = true;

                       dtgEnsayos.Rows[e.RowIndex].Selected = true;

                   }

               }

       }

WIlmar Cabezas

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, June 03, 2009 12:10 AM

@WIlmar Cabezas

Me alegro que te sirva de ayuda o guia.

Gracias por compartir tu codigo(hace meses que no estoy en proyectos que involucren winform)

José A. Fernández

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, September 04, 2009 4:14 PM

Muchas gracias, me ha funcionado y ha sacado de un gran problema.

Alb

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Monday, November 16, 2009 12:29 PM

gracias, me estaba volviendo loca y esto es perfecto!!!

IVL

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, December 04, 2009 9:20 PM

anduve varios dias buscando este tipo de solucion.

mi implementacion utiliza eso si, un datagrid dinamico, asi que tuve que agregar un handler adicional, pero me sirvio mucho el commit

Gracias!!!!

Gabriel Fabres

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, December 29, 2009 11:51 PM

hola soy nuevo en visual net y estoy realizando una aplicacion el cual necesito selecionar varios cosas de un datagrid con un checkbox y enviar a la base si me pueden ayudar con algun codigo o imagenes de hacer esto gracias

Fernando

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, December 30, 2009 12:06 AM

@Hola Fernando

Si me pueden ayudar? Claro.. solamente que soy yo! en este humilde post

Hace unos cuantos meses que no utilizo winform, asi que no estoy con todo en mi cabeza.

Te convendria probar con ejemplos..

Info sobre el Datagridview

www.windowsclient.net/.../DataGridView%20FAQ.doc

Post relaciones con Datagridview

windowsclient.net/.../default.aspx

Tienes un ejemplo de Datagridview aqui:

blogs.windowsclient.net/.../entry1304.aspx

Te proponga luego que te des una vuelta por los foros de MSDN

social.msdn.microsoft.com/.../categories

Mira la busqueda:

social.msdn.microsoft.com/.../es-ES

... tambien por supuesto que te des una vuelta por los newsgroups (todavía viven je)

Ejemplo (vistos desde la UI de google grupos)

de C#

groups.google.com.ar/.../topics

de VB.NET

groups.google.com.ar/.../topics

Espero que te sirva de ayuda o guia

José A. Fernández

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, January 26, 2010 4:11 PM

Muy bueno, estaba buscando algo así y no sabía como hacerlo.

Garcias, que Dios te bendiga

Jesús Perciles Contreras

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, February 19, 2010 9:24 AM

Bien, pero SI NO HAY DATAGRID usar esto:

geekswithblogs.net/.../14871.aspx

Roberto

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, February 19, 2010 11:54 AM

Hola @Roberto

Gracias por el enlace, solo aclaro que tu enlace es para DataGrid para la web (el ahora Gridview)

Aqui en este post es sobre el DataGridview para Winform (columna tipo DataGridViewCheckBoxColumn)

Saludos

José A. Fernández

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Monday, March 08, 2010 1:59 AM

Muchas gracias!!!!!!!!! lo probe con la segunda solucion!!! de nuevo muchas gracias... este ha sido muy claro.......... me ha solucionado un problema de mi tesis (q la estoy acabando) :)

Any

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, March 24, 2010 11:14 AM

Muchísimas gracias...me ha sido de gran ayuda.

un saludo.

Sergio Pino

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Thursday, April 08, 2010 8:52 AM

Wow!!! Muchisimas Gracias en verdad me sirvió bastante ;)!!!

TaniaMalfoy

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, April 20, 2010 1:07 AM

Miren... yo use el evento CellValueChanged una vez k cambiaba el valor el chekbox asi todo lo demas .... calculos etc.. pero antes de salir de este evento es necesario dar un AcceptChanges sobre el source para que los cambios junto con el chekbox se reflejen sean aceptados.

Miriam

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Saturday, May 22, 2010 11:21 PM

esta es otra pequeña implementacion:

if (e.ColumnIndex == dgvListado.Columns["btnselected"].Index)

           {

               DataGridViewCheckBoxCell check = (DataGridViewCheckBoxCell)dgvListado.Rows[e.RowIndex].Cells["btnselected"];

               check.Value = ( check.Value == null || check.Value.Equals(false) ) ? true : false;

           }

Wallas

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, July 13, 2010 5:12 PM

Tu Ejemplo me sirvio a la perfeccion.... muchas gracias!!

Jesus B

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Thursday, July 15, 2010 4:45 PM

Excelente ayuda!!!

Gracias!!!!

Anyi Rengel

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, July 21, 2010 7:07 PM

muy buen ejemplo y muy claro,  gracias

Al

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Sunday, July 25, 2010 11:56 PM

La primera opción funcionó perfecto, la segunda para nada.

Gacias

xGs_Manco

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Friday, September 17, 2010 10:46 AM

muchas gracias, me fúe muy útil ;)

luis

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Monday, November 22, 2010 9:46 PM

Bien !!!! ...gracias.

Daniel

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, January 04, 2011 10:19 PM

EXCELENTE POST...!! FELICIDADES.. QUE BUENO QUE HAY GENTE CON BUEN CORAZON QUE NOS AYUDA A NOSOTROS.. JUESTO LO QUE ESTABA NECESITANDO.. SI FUNCIONA..!! LO RECOMIENDO

Andres A.

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Tuesday, May 31, 2011 11:04 PM

Buen articulo. Estaba buscando por todos los eventos del datagriview y no daba con resolver este problema de checkbox hasta que encontre esta pagina y pude por fin resolverlo.

Saludos.

Ricardo

# re: DataGridViewCheckBoxColumn: Detectar el cambio/check en el evento CellValueChanged@ Wednesday, August 17, 2011 12:11 AM

Excelente solucion para finalizar el modo "Edicion" en el que se encuentra un check en una fila cuando no cambias el foco y quieres procesar los datos de todas sus selecciones incluyendo esa.

Gracias por el aporte

Clemente