none
llenar casillas de checkedlistbox con tabla mysql

    Question

  • Hola Buenos días  a todos

     

    Quisiera que por favor me ayudaran con un objeto checkdlistbox

    Lo que estoy haciendo es lo siguiente:

    Tengo un listbox y un checkedlistbox llamados procantesbox1 procanteschekbox1 ambos precargado con info de una BD mysql

      al hacer click en cualquier ítem del listbox Se busca el valor en la misma base de datos

    Quiero que ese valor  marque la casilla correspondiente del checkedlistbox

    Pero no me la está marcando es que no sé cómo hacerlo a ver si alguien me puede ayudar,loque hace es que me agrega el valor del resultado como si fuera un item mas y eso no es lo que quiero , tampoco me envia error pero el valor si me lo esta mostrando en un msgbox que le coloque mas debajo

                                 Clicks

    Listbox1               ---------->                  checkedlistbox

    1 proveedores                                     1 fabricantes

    --------------                                        x--------------------

    Les dejo el código:

     

    Private Sub procantesbox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles procantesbox1.SelectedIndexChanged
    
        Using cn As New MySqlConnection("Server=localhost;Database=taller_produccion; uid=root;pwd=root;Allow Zero Datetime=True;Convert Zero Datetime=True;")
    
          Dim cm As MySqlCommand
          Dim dr As MySqlDataReader
          cn.Open()
    
          Dim query As String = "SELECT * FROM fabricantes INNER JOIN proveedores_fabricantes ON fabricantes.cod_fab = proveedores_fabricantes.cod_fab WHERE proveedores_fabricantes.cod_pro = ?cod_pro"
         
          cm = New MySqlCommand()
          cm.Parameters.AddWithValue("?cod_pro", Val(procantesbox1.SelectedItem))
          cm.CommandText = query
          cm.CommandType = CommandType.Text
          cm.Connection = cn
          dr = cm.ExecuteReader()
          While dr.Read()
    
            procanteschekBox1.Items.Add(Convert.ToString(dr("cod_fab")))
            MsgBox(Convert.ToString(dr("cod_fab")))
    
    
          End While
          dr.Close()
    
        End Using

    Friday, July 01, 2011 3:23 PM

Answers

  • Hola Antonio

    Ya pude solucionarlo con estas lineas de codigo

     Dim iTam As Integer = (Convert.ToString(dr("cod_fab")))
    
            For i As Int16 = Val(iTam) - 1 To Val(iTam) - 1
    
              procanteschekBox1.SetItemChecked(i, True)
    
            Next
    

     

    ya puedo hacer click en mi listbox  y hacer que el valor seleccionado active las casillas del checkedlistbox uno o varios que esten enlazados a la base de datos mysql.

    aclaro que la formula de este codigo la saque de un foro  http://www.forosdelweb.com/f29/marcar-todos-checkedlistbox-313768/ antonio tambien te agradezco por tu ayuda ya llevaba 2 dias con esto.

    mi codigo final quedo asi:

    Private Sub procantesbox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles procantesbox1.SelectedIndexChanged
        'primero limpia las casillas de checkbox que estan seleccionados
        Dim n As Integer
        For n = 0 To procanteschekBox1.Items.Count - 1
          procanteschekBox1.SetItemChecked(n, False)
        Next
        '---------------------------------------------------------------------------------------------
    
        Using cn As New MySqlConnection("Server=localhost;Database=taller_produccion; uid=root;pwd=root;Allow Zero Datetime=True;Convert Zero Datetime=True;")
    
          Dim cm As MySqlCommand
          Dim dr As MySqlDataReader
          cn.Open()
    
          Dim query As String = "SELECT * FROM fabricantes INNER JOIN proveedores_fabricantes ON fabricantes.cod_fab = proveedores_fabricantes.cod_fab WHERE proveedores_fabricantes.cod_pro = ?cod_pro"
    
          cm = New MySqlCommand()
          cm.Parameters.AddWithValue("?cod_pro", Val(procantesbox1.SelectedItem))
          cm.CommandText = query
          cm.CommandType = CommandType.Text
          cm.Connection = cn
          dr = cm.ExecuteReader()
          While dr.Read()
    
            Dim iTam As Integer = (Convert.ToString(dr("cod_fab")))
    
            For i As Int16 = Val(iTam) - 1 To Val(iTam) - 1
    
              procanteschekBox1.SetItemChecked(i, True)
    
            Next
    
    
          End While
          dr.Close()
    
        End Using
      End Sub
    
     
    • Marked as answer by myovani Friday, July 01, 2011 10:00 PM
    Friday, July 01, 2011 10:00 PM

All replies

  • Hola: 

    Si a lo que te refires con marcar es que quede se establezca el item como cheked tienes que agregar los items de la siguiente forma:

     

    procanteschekBox1.Items.Add(Convert.ToString(dr("cod_fab")),true);
    


    Después para saber los items que tienes seleccionados tienes que acceder a traves de CheckedItems;

     

    Saludos,

    PEdro

     

     

     

     

     


    phurtado
    Friday, July 01, 2011 3:36 PM
  • Hola

    Lo que estas diciendo es que ya tu tienes precargado todos los elementos y quieres que se "activen" solo los que corresponden a la lista

    Lo que deberías hacer es... en vez de usar 

    procanteschekBox1.Items.Add(Convert.ToString(dr("cod_fab"))) <-- Esto añade nuevos elemento

    usar esto

    procantescheckBox.SetItemChecked(checkedListBox1.Items.IndexOf(Convert.ToString(dr("cod_fab"))), True) <-- Esto selecciona o activa el checkbox de ese valor

     

    Saludos


    Antonio Lobo
    Mi Blog
    Friday, July 01, 2011 3:39 PM
  • Hola

    Lo que estas diciendo es que ya tu tienes precargado todos los elementos y quieres que se "activen" solo los que corresponden a la lista

    Lo que deberías hacer es... en vez de usar 

    procanteschekBox1.Items.Add(Convert.ToString(dr("cod_fab"))) <-- Esto añade nuevos elemento

    usar esto

    procantescheckBox.SetItemChecked(checkedListBox1.Items.IndexOf(Convert.ToString(dr("cod_fab"))), True) <-- Esto selecciona o activa el checkbox de ese valor

     

    Saludos


    Antonio Lobo
    Mi Blog

    Hola Antonio he estado probrando tu codigo es lo que busco pero me sale el siguiente error:

    InvalidArgument=El valor de '-1' no es válido para 'index'.
    Nombre del parámetro: index

    no se si habre escrito algo mal ,esta es mi linea de codigo:

    procanteschekBox1.SetItemChecked(procanteschekBox1.Items.IndexOf(Convert.ToString(dr("cod_fab"))), True)


    Friday, July 01, 2011 8:17 PM
  • Hola

    Si no estoy mal eso pasa cuando el elemento que obtiene desde dr("cod_fab") no existe en la lista

     

    Saludos


    Antonio Lobo
    Mi Blog
    Friday, July 01, 2011 9:09 PM
  • Hola Antonio

    Ya pude solucionarlo con estas lineas de codigo

     Dim iTam As Integer = (Convert.ToString(dr("cod_fab")))
    
            For i As Int16 = Val(iTam) - 1 To Val(iTam) - 1
    
              procanteschekBox1.SetItemChecked(i, True)
    
            Next
    

     

    ya puedo hacer click en mi listbox  y hacer que el valor seleccionado active las casillas del checkedlistbox uno o varios que esten enlazados a la base de datos mysql.

    aclaro que la formula de este codigo la saque de un foro  http://www.forosdelweb.com/f29/marcar-todos-checkedlistbox-313768/ antonio tambien te agradezco por tu ayuda ya llevaba 2 dias con esto.

    mi codigo final quedo asi:

    Private Sub procantesbox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles procantesbox1.SelectedIndexChanged
        'primero limpia las casillas de checkbox que estan seleccionados
        Dim n As Integer
        For n = 0 To procanteschekBox1.Items.Count - 1
          procanteschekBox1.SetItemChecked(n, False)
        Next
        '---------------------------------------------------------------------------------------------
    
        Using cn As New MySqlConnection("Server=localhost;Database=taller_produccion; uid=root;pwd=root;Allow Zero Datetime=True;Convert Zero Datetime=True;")
    
          Dim cm As MySqlCommand
          Dim dr As MySqlDataReader
          cn.Open()
    
          Dim query As String = "SELECT * FROM fabricantes INNER JOIN proveedores_fabricantes ON fabricantes.cod_fab = proveedores_fabricantes.cod_fab WHERE proveedores_fabricantes.cod_pro = ?cod_pro"
    
          cm = New MySqlCommand()
          cm.Parameters.AddWithValue("?cod_pro", Val(procantesbox1.SelectedItem))
          cm.CommandText = query
          cm.CommandType = CommandType.Text
          cm.Connection = cn
          dr = cm.ExecuteReader()
          While dr.Read()
    
            Dim iTam As Integer = (Convert.ToString(dr("cod_fab")))
    
            For i As Int16 = Val(iTam) - 1 To Val(iTam) - 1
    
              procanteschekBox1.SetItemChecked(i, True)
    
            Next
    
    
          End While
          dr.Close()
    
        End Using
      End Sub
    
     
    • Marked as answer by myovani Friday, July 01, 2011 10:00 PM
    Friday, July 01, 2011 10:00 PM
  • Hola

    Que bien que lo hayas resuelto :) ... una cosa bonita que tiene programar es cuando encuentras las soluciones a los problemas.

     

    Saludos


    Antonio Lobo
    Mi Blog
    Friday, July 01, 2011 10:06 PM