none
cambiar campo bit en base de datos al marcar checkbox en datagridview RRS feed

  • Pregunta

  • Saludos tengo un campo con el estado, es decir si es true o false el campo es el tipo bit, pero al marcar el la columna del datagrid no me valida el cambio a la base de datos, alguna sugerencia

    Arismendy Rodríguez

    viernes, 16 de junio de 2017 2:21

Respuestas

  • Saludos, Este codigo seria en C#, ya tu lo acomodas a VB, es lo mismo.

    Programa el evento del datagrid llamado CellContentClick, acá un ejemplo.

    En donde estan los comentarios es en donde debes llamar a tus metodos para que se cargue a la base de datos.

            private void dataConsultaReportes_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                int row = e.RowIndex;
                foreach (DataGridViewRow item in dataConsultaReportes.Rows)
                {
                    if(row!= item.Index)
                    {
                        dataConsultaReportes.Rows[item.Index].Cells[0].Value = false;
                        // Aca se actualiza en la base de datos para que ponga la bandera en 0 o false.
                    }
                }
                if (e.ColumnIndex == dataConsultaReportes.Columns[0].Index)
                {
                    dataConsultaReportes.EndEdit();
                    if ((bool)dataConsultaReportes.Rows[e.RowIndex].Cells[0].Value)
                    {
                        // Aca se actualiza en la base de datos para que ponga la bandera en 1 o true.
                    }
                }
            }


    • Editado Jose Fdo Londoño viernes, 16 de junio de 2017 13:25
    • Marcado como respuesta mendy123z viernes, 16 de junio de 2017 21:40
    viernes, 16 de junio de 2017 13:23

Todas las respuestas

  • Hola mendy123z,

    Claro, el campo bit almacena dos valores 0 y 1 (sin contar el NULL).

    ¿Puedes mostrar el código de como lo estás implementado? Así sería más fácil encontrar el posible error.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 16 de junio de 2017 2:24
  • SAludos el campo lo muestro sin problemas en el datagrid, la parte que no se como hacer es que al desmarcar por ejemplo una check de una fila, ese dato sea validado directamente al valor del campo en la base de datos. Este es el codigo.

      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim da As New SqlDataAdapter("select * from estado", con)
            Dim dt As New DataTable
            da.Fill(dt)
            dg.DataSource = dt
        End Sub
    
        Private Sub dg_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles dg.CurrentCellDirtyStateChanged
            If dg.IsCurrentCellDirty Then
                dg.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If
        End Sub

    La idea es que al marcar la columna tipo check box se desmarque también en la base de datos, con lo que dicho registro quedaría marcado como deshabilitado


    Arismendy Rodríguez

    viernes, 16 de junio de 2017 11:34
  • Saludos, Este codigo seria en C#, ya tu lo acomodas a VB, es lo mismo.

    Programa el evento del datagrid llamado CellContentClick, acá un ejemplo.

    En donde estan los comentarios es en donde debes llamar a tus metodos para que se cargue a la base de datos.

            private void dataConsultaReportes_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                int row = e.RowIndex;
                foreach (DataGridViewRow item in dataConsultaReportes.Rows)
                {
                    if(row!= item.Index)
                    {
                        dataConsultaReportes.Rows[item.Index].Cells[0].Value = false;
                        // Aca se actualiza en la base de datos para que ponga la bandera en 0 o false.
                    }
                }
                if (e.ColumnIndex == dataConsultaReportes.Columns[0].Index)
                {
                    dataConsultaReportes.EndEdit();
                    if ((bool)dataConsultaReportes.Rows[e.RowIndex].Cells[0].Value)
                    {
                        // Aca se actualiza en la base de datos para que ponga la bandera en 1 o true.
                    }
                }
            }


    • Editado Jose Fdo Londoño viernes, 16 de junio de 2017 13:25
    • Marcado como respuesta mendy123z viernes, 16 de junio de 2017 21:40
    viernes, 16 de junio de 2017 13:23
  • Por un tema de performance, no sería óptimo que cada vez que tu desmarques o marques viajes a la base de datos. Lo ideal sería que marques o desmarques y con un botón viajes a la base de datos recorriendo las filas y actualizando tu tabla de la BD de esa forma.

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    viernes, 16 de junio de 2017 14:49
  • Hola mendy123z,

    Coincido con Brayan, no sería aconsejable estar haciendo un 'UPDATE' a la base de datos cada vez que se cambie el estado del CheckBox.

    ¿No puedes utilizar un botón u otro control para Guardar los cambios y en una sola ejecución realizar el 'update' a los campos? E incluso, según el diseño de tu formulario, si no deseas agregar ningún nuevo control podrías 'actualizar' los valores al cerrar ese formulario, ya sea utilizando el evento FormClosed o FormClosing. (Este último se ejecuta cuando se va a cerrar el formulario, ahí podrías lanzar un MessageBox y preguntar si desea conservar los cambios o no).

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 16 de junio de 2017 21:10
  • Buena propuesta, aunque en este caso no creo que tenga mayor implicación, pues esa es una acción muy ocasional, solo esta puesta ahí para casos muy especiales, de todas formas gracias. 

    Arismendy Rodríguez

    viernes, 16 de junio de 2017 21:44