none
Mostrar un boton solo si todas las casillas de un datagridview estan checked. RRS feed

  • Pregunta

  • Hola

    Como puedo lograr que se muestre un boton hasta que todas las casillas de un datagridview esten checked, ahorita tengo este codigo pero lo hace al momento de que hago check en la segunda casilla, es decir sin importar si las demas que faltan esten checked:

             

     private void dataGridViewQuestions_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {

                foreach (DataGridViewRow row in dataGridViewQuestions.Rows)
                {
                    DataGridViewCheckBoxCell checkboxcell = new DataGridViewCheckBoxCell();
                    checkboxcell = (DataGridViewCheckBoxCell)row.Cells["ANSWER"];

                    if (Convert.ToBoolean(checkboxcell.Value) == true)
                    {
                        btnAcceptAudit.Visible = true;
                    }
                }
            }

    Espero me puedan ayudar

    sábado, 7 de septiembre de 2019 10:17

Respuestas

  • Dentro del bucle configura un bool, y compáralo a la salida del bucle:

        private void dataGridViewQuestions_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            bool todosMarcados = true;
            foreach (DataGridViewRow row in dataGridViewQuestions.Rows)
            {
                DataGridViewCheckBoxCell checkboxcell = (DataGridViewCheckBoxCell)row.Cells["ANSWER"];
                if (Convert.ToBoolean(checkboxcell.Value) != true)
                {
                    todosMarcados = false;
                    break;
                }
            }
    
            btnAcceptAudit.Visible = todosMarcados;
        }

    sábado, 7 de septiembre de 2019 19:44
    Moderador
  • Revisa bien lo que te puse, que debes tener algo de más o de menos. Fíjate que el botón siempre se pone en visible o invisible, porque lo hace fuera del bucle. Así que lo del "último recorrido" es irrelevante en este caso (pero no lo era con tu código original, en el que hacías el cambio dentro del bucle).
    martes, 10 de septiembre de 2019 10:34
    Moderador

Todas las respuestas

  • Dentro del bucle configura un bool, y compáralo a la salida del bucle:

        private void dataGridViewQuestions_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            bool todosMarcados = true;
            foreach (DataGridViewRow row in dataGridViewQuestions.Rows)
            {
                DataGridViewCheckBoxCell checkboxcell = (DataGridViewCheckBoxCell)row.Cells["ANSWER"];
                if (Convert.ToBoolean(checkboxcell.Value) != true)
                {
                    todosMarcados = false;
                    break;
                }
            }
    
            btnAcceptAudit.Visible = todosMarcados;
        }

    sábado, 7 de septiembre de 2019 19:44
    Moderador
  • He realizado eso que me indicas pero en el ultimo recorrido se queda sin hacer el check, por lo cual no manda a visible el boton.

    martes, 10 de septiembre de 2019 9:20
  • Revisa bien lo que te puse, que debes tener algo de más o de menos. Fíjate que el botón siempre se pone en visible o invisible, porque lo hace fuera del bucle. Así que lo del "último recorrido" es irrelevante en este caso (pero no lo era con tu código original, en el que hacías el cambio dentro del bucle).
    martes, 10 de septiembre de 2019 10:34
    Moderador
  • Revise nuevamente el codigo agregado y sigue sin ejecutar la accion que le estoy pidiendo siendo que he estado usando lo que me dices, de igual forma gracias por la respuesta.
    jueves, 12 de septiembre de 2019 8:51
  • Ponnos aqui el codigo tal como ha quedado finalmente. A veces, haciendo que otra persona lo examine, se detecta algo que al autor ha pasado inadvertidamente por alto y esta causando el problema.
    jueves, 12 de septiembre de 2019 15:20
    Moderador
  •  Que tal Alberto este es el codigo:

    //// Show second button
            private void dataGridViewQuestions_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                bool todoMarcados = true;
                foreach (DataGridViewRow row in dataGridViewQuestions.Rows)
                {

                    DataGridViewCheckBoxCell checkboxcell = (DataGridViewCheckBoxCell)row.Cells["ANSWER"];
                    if (Convert.ToBoolean(checkboxcell.Value) != true)
                    {
                        todoMarcados = false;
                        break;
                    }
                }

                btnAcceptAudit.Visible = todoMarcados;
            }


    • Editado IsaMtz viernes, 13 de septiembre de 2019 9:44
    viernes, 13 de septiembre de 2019 9:42
  • Sí, tiene toda la pinta de estar bien tal como está escrito. Si no funciona, es el momento de usar el debugger. Pon un punto de ruptura a la entrada del bucle y sigue la ejecución paso a paso examinando las variables según se vayan asignando. La sospecha aquí es que o bien el checkboxcell no recibe la celda correcta, o bien la conversión a boolean del Value no interpreta correctamente si la casilla está seleccionada o no. Siguiéndolo con el debugger se debe poder detectar cuál es el valor y tipo que está devolviendo y ver qué cambios necesita para obtener el resultado deseado. Igualmente, al seguir paso a paso, se debería ver cómo sale del bucle si alguno es false, o como siguie hasta el final del bucle si todos son true, y en consecuencia verse cómo asigna el valor correspondiente al botón. Si no es así. hay que tomar nota de cuál es el sitio exacto en el que no se cumplió lo esperado, y cuáles son los valores que ocasionaron que no se cumpliese. A partir de ahí se puede estudiar cuáles son los cambios necesarios para hacerlo funcionar.
    viernes, 13 de septiembre de 2019 11:58
    Moderador