none
Varios ComboBox se llenan con ultima consulta

    Pregunta

  • Buenas, mi problema es que en una Forma tengo que llenar 3 ComboBox y los lleno usando una función dentro de un módulo, pero al ejecutar se llenan los Combos con los datos de la última consulta la verdad no sé cómo solucionarlo.

    Estas es el modulo con la función:

    Module Configuracion

        Public con As SqlConnection = New SqlConnection
        Dim cmd As SqlCommand
        Dim da As SqlDataAdapter
        Dim ds As DataSet
        Dim table As DataTable
        Dim adap As SqlDataAdapter

        Dim dv As New DataView
        Dim MyTable As New DataTable
        Public bd As String = "Data Source=(local)\PRUEBAS;" & _
                                     "Integrated Security=True;" & _
                                     "Initial Catalog=Control_Escolar"

         Public Sub ConexionBD()
            con.ConnectionString = bd
            Try
                con.Open()
            Catch ex As Exception
                MsgBox("Error al tratar de conectarse a la DB", MsgBoxStyle.Critical, "Error")
            Finally
                con.Close()
            End Try
        End Sub

        Public Function FillCombo(ByVal sql As String, ByVal combo As ComboBox)
            combo.Items.Clear()

            cmd = New SqlCommand(sql, con) ' Pasar la consulta sql y la conexión al Sql Command
            da = New SqlDataAdapter(cmd)
            ds = New DataSet                'Crear y Llenar un Dataset
            da.Fill(ds)

            MyTable = ds.Tables(0).Clone()  'Creamos un clon de la columnas de la Consulta
            MyTable.Clear()
            dv.Table = MyTable

            Dim RowView = dv.AddNew()       'Agregamos el espacio en blanco requerido
            RowView(0) = 0
            RowView(1) = ""
            RowView.EndEdit()
            dv.Table.Merge(ds.Tables(0))    'copiamos los datos de la consulta

            combo.DataSource = dv 'ds.Tables(0) ' asignar el DataSource al combobox
            combo.DisplayMember = ds.Tables(0).Columns(1).Caption.ToString
            combo.ValueMember = ds.Tables(0).Columns(0).Caption.ToString

            Return combo
        End Function

    End Module

    Asi mando llamar la función para los 3 combos:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ConexionBD()

            Dim sql_Tipos As String = "SELECT Id_Tipo, Nombre FROM Tipo_Usuario"
            Dim sql_Grupos As String = "SELECT Id_Grupo, Nombre FROM Grupos"
            Dim sql_Materias As String = "SELECT Id_Materia, Nombre FROM Materias"

            C1 = FillCombo(sql_Grupos, C1)
            C1.SelectedIndex = 0

            C2 = FillCombo(sql_Grupos, C2)
            C2.SelectedIndex = 0

            C3 = FillCombo(sql_Grupos, C3)
            C3.SelectedIndex = 0

    End Sub


    De antemano muchas gracias


    • Editado Israel_Saga sábado, 20 de agosto de 2016 8:27
    sábado, 20 de agosto de 2016 7:04

Respuestas

  • Hola

    Cuando mandaste a llamar tu funcion mandaste la misma consulta en los 3 comboBox lo que te puse con negritas.

     C1 = FillCombo(sql_Grupos, C1)

    y deberia ser asi

     C1 = FillCombo(sql_Tipos, C1)
            C1.SelectedIndex = 0
    
            C2 = FillCombo(sql_Grupos, C2)
            C2.SelectedIndex = 0
    
            C3 = FillCombo(sql_Materias, C3)
            C3.SelectedIndex = 0

    Saludos

    • Marcado como respuesta Israel_Saga sábado, 20 de agosto de 2016 8:26
    sábado, 20 de agosto de 2016 8:07
  • Gracias por tu tiempo Misael ya encontre el error y es porque en el Modulo me falta reiniciar la variable dataview

            combo.Items.Clear()

            cmd = New SqlCommand(sql, con) ' Pasar la consulta sql y la conexión al Sql Command
            da = New SqlDataAdapter(cmd)
            ds = New DataSet 'Crear y Llenar un Dataset
            dv = New DataView
            da.Fill(ds)

    • Marcado como respuesta Israel_Saga sábado, 20 de agosto de 2016 8:26
    sábado, 20 de agosto de 2016 8:26

Todas las respuestas

  • Es porque estas mandando la misma consulta para todos los comboBox

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ConexionBD()
    
            Dim sql_Tipos As String = "SELECT Id_Tipo, Nombre FROM Tipo_Usuario"
            Dim sql_Grupos As String = "SELECT Id_Grupo, Nombre FROM Grupos"
            Dim sql_Materias As String = "SELECT Id_Materia, Nombre FROM Materias"
    
            C1 = FillCombo(sql_Tipos, C1)
            C1.SelectedIndex = 0
    
            C2 = FillCombo(sql_Grupos, C2)
            C2.SelectedIndex = 0
    
            C3 = FillCombo(sql_Materias, C3)
            C3.SelectedIndex = 0
    
    End Sub
    Mi Blog

    Saludos





    sábado, 20 de agosto de 2016 7:36
  • Gracias Misael por responder pero no puede ser la misma consulta, ya uqe hace referencia a diferentes tablas y diferentes variables o a lo mejor no entendi lo que quisiste decir.

    Saludos

    sábado, 20 de agosto de 2016 8:01
  • Hola

    Cuando mandaste a llamar tu funcion mandaste la misma consulta en los 3 comboBox lo que te puse con negritas.

     C1 = FillCombo(sql_Grupos, C1)

    y deberia ser asi

     C1 = FillCombo(sql_Tipos, C1)
            C1.SelectedIndex = 0
    
            C2 = FillCombo(sql_Grupos, C2)
            C2.SelectedIndex = 0
    
            C3 = FillCombo(sql_Materias, C3)
            C3.SelectedIndex = 0

    Saludos

    • Marcado como respuesta Israel_Saga sábado, 20 de agosto de 2016 8:26
    sábado, 20 de agosto de 2016 8:07
  • Tienes razon no vi bien, pero fijate que ya hice la correción que mencionas y aun asi sale la informacion de la ultima consulta en los tres. Y lo que seleccione en uno aparece en los otros.


    • Editado Israel_Saga sábado, 20 de agosto de 2016 8:12
    sábado, 20 de agosto de 2016 8:09
  • Gracias por tu tiempo Misael ya encontre el error y es porque en el Modulo me falta reiniciar la variable dataview

            combo.Items.Clear()

            cmd = New SqlCommand(sql, con) ' Pasar la consulta sql y la conexión al Sql Command
            da = New SqlDataAdapter(cmd)
            ds = New DataSet 'Crear y Llenar un Dataset
            dv = New DataView
            da.Fill(ds)

    • Marcado como respuesta Israel_Saga sábado, 20 de agosto de 2016 8:26
    sábado, 20 de agosto de 2016 8:26