none
Actualizar combobox al registrar, modificar o eliminar un registro RRS feed

  • Pregunta

  • Hola a todos, como puedo actualizar un combobox cuando registro un nuevo item, o cuando se modifica o se elimina uno ya existente?. A lo que voy es que cuando hago un registro nuevo, el combobox no muestra el nuevo item, a menos que cierre el formulario y lo habra de nuevo. Ocupo este codigo para registrar

    Private Sub Btn_Registrar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Registrar.Click
            cn.Open()
            Try
                Dim cmd As New SqlCommand("Registro_Giro", cn)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.AddWithValue("@Nombre", txt_giro.Text)
                cmd.ExecuteNonQuery()
                MessageBox.Show("Registros Guardados")
            Catch generatedExceptionName As Exception
                Throw
            End Try
            cn.Close()
        End Sub

    Este codigo utilizo para ver los items en el combobox

    Public Sub Ver_Giros()
            Dim variable As SqlDataReader
            Dim cmd2 As New SqlCommand
            cmd2.CommandType = CommandType.Text
            cmd2.CommandText = ("Select Nombre from Tbl_Giro")
            cmd2.Connection = (cn)
            cn.Open()
            variable = cmd2.ExecuteReader()
            While variable.Read = True
                'Aquí debe agregar los datos a todos los listboxs
                cbx_Giro.Items.Add(variable.Item(0))
            End While
            cn.Close()
    End Sub


    • Editado adriian.91 miércoles, 25 de enero de 2017 15:24
    miércoles, 25 de enero de 2017 15:23

Respuestas

  • "adriian.91" preguntó:

    > como puedo actualizar un combobox cuando registro un nuevo item, o cuando
    > se modifica o se elimina uno ya existente?
    >
    > Este codigo utilizo para ver los items en el combobox
    >
    > Public Sub Ver_Giros()
    >   ...
    >   ...
    >   ...
    >   While variable.Read = True
    >     'Aquí debe agregar los datos a todos los listboxs
    >      cbx_Giro.Items.Add(variable.Item(0))
    >   End While
    >
    > End Sub

    Hola:

    Si en el procedimiento Btn_Registrar_Click conoces los datos que se tienen que mostrar en el control ComboBox, una vez que ejecutes el método ExecuteNonQuery puedes añadir dicho elemento al control ComboBox:

        Private Sub Btn_Registrar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Registrar.Click
    
             ' ...
             ' ...
             cmd.ExecuteNonQuery()
    
             ' Añadimos el elemento al control ComboBox
             cbx_Giro.Items.Add("Valor del elemento")
    
        End Sub
    

    Y si no conoces los datos, entonces tendrás que efectuar una llamada al procedimiento Ver_Giros:

        Private Sub Btn_Registrar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Registrar.Click
    
            Try
                Using cn As New SqlConnection(cadena de conexión )
                    Dim cmd As SqlCommand = cn.CreateCommand()
                    cmd.CommandText = "Registro_Giro"
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.Parameters.AddWithValue("@Nombre", txt_giro.Text)
                    cn.Open()
                    cmd.ExecuteNonQuery()
                End Using
    
                ' Llamar al procedimiento Ver_Giros para actualizar
                ' el control ComboBox.
                '
                Ver_Giros()
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Como en el procedimiento Ver_Giros añades manualmente los elementos al control ComboBox conforme recorres el objeto SqlDataReader recuperado, no estaría de más que ANTES de añadir nuevos elementos, ELIMINARAS todos los existentes en el control ComboBox a fin de no duplicar los elementos:

       Public Sub Ver_Giros()
    
            Try
                Using cn As New SqlConnection(cadena de conexión)
    
                    Dim cmd As SqlCommand = cn.CreateCommand()
                    cmd.CommandText = "Select Nombre from [Tbl_Giro]"
                    cn.Open()
                    Dim reader As SqlDataReader = cmd.ExecuteReader()
    
                    ' Llegado aquí se ha ejecutado satisfactoriamente la consulta SQL,
                    ' por lo que primero eliminamos los elementos existentes.
                    '
                    cbx_Giro.Items.Clear()
    
                    ' Y después volvemos a añadirlos al control ComboBox.
                    '
                    While reader.Read = True
                        'Aquí debe agregar los datos a todos los listboxs
                        cbx_Giro.Items.Add(reader.Item(0))
                    End While
    
                End Using
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Fíjate que utilizo un objeto SqlConnection dentro de cada procedimiento, en lugar de tener uno declarado a nivel del formulario, clase o módulo.

    Entiendo que lo único que deberías tener a nivel global es la cadena de conexión que utilizas para conectarte con la base de datos de SQL Server.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta adriian.91 miércoles, 25 de enero de 2017 17:51
    miércoles, 25 de enero de 2017 16:01
    Moderador

Todas las respuestas

  • "adriian.91" preguntó:

    > como puedo actualizar un combobox cuando registro un nuevo item, o cuando
    > se modifica o se elimina uno ya existente?
    >
    > Este codigo utilizo para ver los items en el combobox
    >
    > Public Sub Ver_Giros()
    >   ...
    >   ...
    >   ...
    >   While variable.Read = True
    >     'Aquí debe agregar los datos a todos los listboxs
    >      cbx_Giro.Items.Add(variable.Item(0))
    >   End While
    >
    > End Sub

    Hola:

    Si en el procedimiento Btn_Registrar_Click conoces los datos que se tienen que mostrar en el control ComboBox, una vez que ejecutes el método ExecuteNonQuery puedes añadir dicho elemento al control ComboBox:

        Private Sub Btn_Registrar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Registrar.Click
    
             ' ...
             ' ...
             cmd.ExecuteNonQuery()
    
             ' Añadimos el elemento al control ComboBox
             cbx_Giro.Items.Add("Valor del elemento")
    
        End Sub
    

    Y si no conoces los datos, entonces tendrás que efectuar una llamada al procedimiento Ver_Giros:

        Private Sub Btn_Registrar_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Registrar.Click
    
            Try
                Using cn As New SqlConnection(cadena de conexión )
                    Dim cmd As SqlCommand = cn.CreateCommand()
                    cmd.CommandText = "Registro_Giro"
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.Parameters.AddWithValue("@Nombre", txt_giro.Text)
                    cn.Open()
                    cmd.ExecuteNonQuery()
                End Using
    
                ' Llamar al procedimiento Ver_Giros para actualizar
                ' el control ComboBox.
                '
                Ver_Giros()
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Como en el procedimiento Ver_Giros añades manualmente los elementos al control ComboBox conforme recorres el objeto SqlDataReader recuperado, no estaría de más que ANTES de añadir nuevos elementos, ELIMINARAS todos los existentes en el control ComboBox a fin de no duplicar los elementos:

       Public Sub Ver_Giros()
    
            Try
                Using cn As New SqlConnection(cadena de conexión)
    
                    Dim cmd As SqlCommand = cn.CreateCommand()
                    cmd.CommandText = "Select Nombre from [Tbl_Giro]"
                    cn.Open()
                    Dim reader As SqlDataReader = cmd.ExecuteReader()
    
                    ' Llegado aquí se ha ejecutado satisfactoriamente la consulta SQL,
                    ' por lo que primero eliminamos los elementos existentes.
                    '
                    cbx_Giro.Items.Clear()
    
                    ' Y después volvemos a añadirlos al control ComboBox.
                    '
                    While reader.Read = True
                        'Aquí debe agregar los datos a todos los listboxs
                        cbx_Giro.Items.Add(reader.Item(0))
                    End While
    
                End Using
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Fíjate que utilizo un objeto SqlConnection dentro de cada procedimiento, en lugar de tener uno declarado a nivel del formulario, clase o módulo.

    Entiendo que lo único que deberías tener a nivel global es la cadena de conexión que utilizas para conectarte con la base de datos de SQL Server.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta adriian.91 miércoles, 25 de enero de 2017 17:51
    miércoles, 25 de enero de 2017 16:01
    Moderador
  • Perfecto Don Enrique, se agradece la explicación. 
    miércoles, 25 de enero de 2017 17:51