none
Problemas al actualizar datos desde un checkedlistbox en windows forms RRS feed

  • Pregunta

  • Tengo un checkedlistbox que lo lleno a través de una consulta select desde una tabla en sql, tal como aparece en la imagen de abajo.

    El problema ocurre cuando quiero hacer un UPDATE en la tabla de mi base de datos a través de la siguiente consulta mediante el boton Guardar.


    Al final al hacer click en el boton Guardar, la tabla en mi base de datos no se actualiza. Como prueba pongo la imagen de abajo.

    Quisiera que me ayuden a determinar el porque no se actualizan mis registros con los items seleccionados de mi checkedlistbox.

    viernes, 31 de mayo de 2019 0:49

Respuestas

  • Hola:
    Si quieres modificar TODOS, solo tienes que quitar la siguiente línea

    If chk302.GetItemCheckState(i) = CheckState.Checked Then    'Solo los marcados
    y su correspondiente End If

    ¿Si afecta a TODOS, para que los muestras en un CheckedListBox?

    > quisiera saber como recorrer o leer todos los valores del checkedboxlist. <

    ¿ Has leido este comentario  'Recorrer todos los item del CheckedListBox  ?
    Ahi tienes la respuesta

    Un saludo desde Bilbo
    Carlos

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 3 de junio de 2019 14:05
    • Marcado como respuesta fredsale martes, 4 de junio de 2019 23:01
    sábado, 1 de junio de 2019 4:37

Todas las respuestas

  • Hola:
    Prueba con algo como esto

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form1
        Private moDataTable As New DataTable()
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=TU_BASE_DE_DATOS;Integrated Security=True"
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptadores
                    Dim loDataAdapter As New SqlDataAdapter("SELECT idRespu, descripRespu FROM ocl.tblrespuesta WHERE idRespu LIKE '302%'", loConexion)
                    loDataAdapter.Fill(moDataTable)
                    chk302.DataSource = moDataTable
                    chk302.DisplayMember = "descripRespu"
                    chk302.ValueMember = "idRespu"
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim lsQuery As String = "UPDATE ocl.tblDetalleRespuestaMultiple SET snRespu=@snRespu, fecharespu=GETDATE() WHERE dniUsu=@dniUsu AND idPregun='302' AND aniosegui='1' AND idRespu=@idRespu"
            Try
                'Iniciamos una transaccion, hay que añadir referencia a System.Transactions
                Using MiTransaccion As New Transactions.TransactionScope()
                   ' Configuramos una conexión con el origen de datos.
                   Using loConexion As New SqlConnection(msCadenaSQL)
                       loConexion.Open()   ' abrir conexión
                       'Recorrer todos los item del CheckedListBox
                       For i As Integer = 0 To chk302.Items.Count - 1
                           If chk302.GetItemCheckState(i) = CheckState.Checked Then    'Solo los marcados
                               ' crear comando
                               Using loComando As New SqlCommand(lsQuery, loConexion)
                                   'añadir parametros al comando
                                   loComando.Parameters.Add(New SqlParameter("@snRespu", CheckState.Checked))
                                   loComando.Parameters.Add(New SqlParameter("@dniUsu", txtDNI.Text))
                                   loComando.Parameters.Add(New SqlParameter("@idRespu", chk302.SelectedValue))
                                   loComando.ExecuteNonQuery()
                               End Using
                           End If
                       Next
                   End Using
                   MiTransaccion.Complete()
               End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos


    • Editado J. Carlos Herrero viernes, 31 de mayo de 2019 8:22
    • Propuesto como respuesta eRiver1 viernes, 31 de mayo de 2019 18:26
    viernes, 31 de mayo de 2019 8:20
  • Hola J.Carlos , muchas gracias por tu respuesta.. el codigo funciona perfecto, pero al intentar actualizar con los checkedlistbox desmarcados.. no logra cumplir el objetivo de UPDATE.

    Al parecer solo actualiza cuando marco los checkedboxes , a que se debe esto?.

    viernes, 31 de mayo de 2019 17:06
  • Hola:
    > If chk302.GetItemCheckState(i) = CheckState.Checked Then    'Solo los marcados <
    Has leido el comentario de esta linea.

    Un saludo desde Bilbo
    Carlos

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 3 de junio de 2019 14:05
    viernes, 31 de mayo de 2019 18:09
  • Hola Carlos, muchas gracias si lo leí, pero como puedo hacer para actualizar un campo marcado como desmarcado, ya que si por equivocación marque algo que no queria. 
    viernes, 31 de mayo de 2019 18:14
  • Hola:

    ¿Pero que es lo que quieres hacer UPDATE, a los marcados, a los desmarcados o a todos?

    Un saludo desde Bilbo
    Carlos

    • Propuesto como respuesta eRiver1 viernes, 31 de mayo de 2019 18:26
    viernes, 31 de mayo de 2019 18:21
  • Hola Carlos, gracias por la respuesta.. en el update quiero actualizar todo tipo de cambio(marcados y desmarcados), quisiera saber como recorrer o leer todos los valores del checkedboxlist...

    adjunto imagen de ayuda

    viernes, 31 de mayo de 2019 20:20
  • Hola:
    Si quieres modificar TODOS, solo tienes que quitar la siguiente línea

    If chk302.GetItemCheckState(i) = CheckState.Checked Then    'Solo los marcados
    y su correspondiente End If

    ¿Si afecta a TODOS, para que los muestras en un CheckedListBox?

    > quisiera saber como recorrer o leer todos los valores del checkedboxlist. <

    ¿ Has leido este comentario  'Recorrer todos los item del CheckedListBox  ?
    Ahi tienes la respuesta

    Un saludo desde Bilbo
    Carlos

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 3 de junio de 2019 14:05
    • Marcado como respuesta fredsale martes, 4 de junio de 2019 23:01
    sábado, 1 de junio de 2019 4:37