none
evento para los checkbox de datagridview

    Pregunta

  • Hola.

    He revisado otros posts parecidos a lo que busco pero no es exactamente mi situación.

    Tengo un datagridview con una columna de checkboxs.

    Tengo un label, para indicar  la cantidad de checkbox activados.

    En el datagridview, tengo la propiedad "SelectionMode" en "FullRowSelect", es decir, se selecciona toda la fila independiente de la celda de la fila seleccionada.

    Tengo todas las columnas como "readonly" en false, exceptuando la columna del checkbox.

    El código que tengo es:

     private void dataGridView_Alineaciones_CellContentClick(object sender, DataGridViewCellEventArgs e)
             {
                 contarAlineacionesSeleccionadas();  
             }
    
    
             public static  void contarAlineacionesSeleccionadas()
             {
                 if (TypeViewerPalette.tvc.dataGridView_Alineaciones.DataSource != null)
                 {
                     int contador = 0;
                     int n = TypeViewerPalette.tvc.dataGridView_Alineaciones.Rows.Count;
                     for (int i = 0; i <= n - 1; i++)
                     {
                         if ((bool)TypeViewerPalette.tvc.dataGridView_Alineaciones[2, i].Value == true)
                         {
                             contador++;
                         }
                     }
    
                     TypeViewerPalette.tvc.label_Seleccionados.Text = "Total Seleccionados: " + contador + "/" + n;
                 }
             
             }

    El problema se presenta con el evento "CellContentClick" que si activo el checkbox, el valor de la variable "contador" sigue siendo la que era y no se incrementa.

    En cambio, si depués de activar el checkbox clicko encima de la fila, entonces ya reconoce que está activada.

    No sé si tiene algo que ver el hecho de tener todas la fila seleccionada y si se podría utilizar otro tipo de evento.

    Gracias.


    • Editado joantopo lunes, 25 de marzo de 2013 19:01
    lunes, 25 de marzo de 2013 19:00

Respuestas

Todas las respuestas

  • deberias usar el CellValueChanged

    aqui lo explicocon algunos ejemplos

    C# - [DataGridView] – Uso del CheckBox - DataGridViewCheckBoxColumn

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta joantopo lunes, 25 de marzo de 2013 23:14
    lunes, 25 de marzo de 2013 19:04
  • He probado con "SelectionMode" en "CellSelect" y el resultado es igual de mal.

    Para contabilizar correctamente, tengo que pulsar el checkbox y luego volver a clickar en la fila ò celda.

    lunes, 25 de marzo de 2013 19:07
  • no creo que tenga nada que ver el SelectionMode o el CellSelect

    es un evento el que debes usar


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 25 de marzo de 2013 19:28
  • Me parecen excelentes tus posts. Me he leído el que comentas,pero el evento "CellContentClick" funciona, sólo que le pasa como el otro evento,que necesita luego perder el foco.

    Como hago para seleccionar la misma fila?

    Lo voy a solucionar con que haga ese proceso y luego seleccione la misma fila.

    Para obtener la fila ya lo he visto:

     filera=TypeViewerPalette.tvc.dataGridView_Alineaciones.Rows[e.RowIndex];

    Pero la propiedad dataGridView.Rows(filera).Selected=true;

    no me funciona porque es una propiedad de obtener un valor, no de asignar.

    Cómo puedo asignarle de nuevo que seleccione esa misma fila?

    lunes, 25 de marzo de 2013 20:11
  • Estoy probando los 2 eventos, y no hay ninguno que salte al momento de cambiar el checkbox.

    Según dices en tu tutorial, con el evento "CellContentClick" se dispara en el momento de activar/desactivar el checkbox.

    A mí eso no me sucede, en ambos eventos.

    Tengo un punto de interrupción en el evento, y en cualquier evento, sólo se dispara cuando pierde el foco, es decir, se selecciona otra celda o fila.

    Uso el Visual Studio 2012, no sé si desde entonces habrán cambiado ese concepto.

    lunes, 25 de marzo de 2013 20:34
  • Solucionado:

    No había visto que hay que poner el otro evento:

      private void dataGridView_Alineaciones_CurrentCellDirtyStateChanged(object sender, EventArgs e)
             {
    
                 if (TypeViewerPalette.tvc.dataGridView_Alineaciones.IsCurrentCellDirty)
                 {
    
                     TypeViewerPalette.tvc.dataGridView_Alineaciones.CommitEdit(DataGridViewDataErrorContexts.Commit);
    
                 }
             }
    Muchas gracias.

    • Marcado como respuesta Omar Ortiz lunes, 25 de marzo de 2013 21:35
    • Desmarcado como respuesta joantopo lunes, 25 de marzo de 2013 23:14
    lunes, 25 de marzo de 2013 20:50