Visual Basic .NET: llenar un combobox con un datareader

Se que la mayoría de vosotros llenáis un combobox con un datatable. Hoy vamos a ver como llenar un combobox con una clase y un datareader. El objetivo es crear un método publico que rellene cualquier combobox de un formulario, enviandole una SQL que recuperará los datos deseados, y la referencia del combobox que queremos llenar. La única condición es que la SQL solo tendrá dos campos. El primero será el código, y el segundo la descripción mostrada en la lista del combobox.

En primer lugar declararemos una clase pública con dos propiedades para almacenar el código y la descripción, obtenidos desde el datareader. Esta clase rellenará un arraylist que más tarde se utilizará como origen de datos del combobox que queremos poblar.

El segundo paso consistirá en declarar el procedimiento público que será capaz de rellenar cualquier combobox. Cuando invoquemos a este procedimiento, enviaremos la referencia del combo a rellenar, y la SQL que obtendrá los datos que deseamos.

Para no extenderme demasiado, supongamos que tenemos un combobox llamado ComboClientes que queremos rellenar con el código y nombre de una tabla de clientes de SQL Server. Debajo os dejo el código necesario para utilizar este sistema con Visual Basic .Net.

Imports System.Data.SqlClient

Module ProcedimientosPublicos

    Public Class ElementoCombo
        Private CodigoElemento As String
        Private TextoElemento As String
 
        Public Sub New(ByVal NuevoCodigo As String, ByVal NuevoTexto As String)
            CodigoElemento = NuevoCodigo
            TextoElemento = NuevoTexto
        End Sub
 
        Public ReadOnly Property Codigo() As String
            Get
                Return CodigoElemento
            End Get
        End Property
 
        Public ReadOnly Property Texto() As String
            Get
                Return TextoElemento
            End Get
        End Property
    End Class

    Public Sub CargarComboDesdeSql(ByRef ElComboBox As Windows.Forms.ComboBox, ByVal LaSQL As String)
        Dim Lista As New ArrayList
        Dim Conexion as SqlConnection
        Dim Comando As SqlCommand
        Dim Reader As SqlDataReader
 
        Conexion = New SqlConnection("server=localhost;uid=usuario;pwd=clave;database=agenda")        
    
        Try
            Conexion.Open()
            Comando = New SqlCommand(LaSQL, Conexion)
            Reader = Comando.ExecuteReader()
            While Reader.Read
                Lista.Add(New ElementoCombo(Reader.GetValue(0).ToString, Reader.GetValue(1).ToString))
            End While
            Reader.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Metodo CargarComboDesdeSql", MessageBoxButtons.OK)
        Finally
            Conexion.Close()
        End Try
 
        With ElComboBox
            .DropDownStyle = ComboBoxStyle.DropDown
            .AutoCompleteMode = AutoCompleteMode.Suggest
            .AutoCompleteSource = AutoCompleteSource.ListItems
            .DataSource = Lista
            .ValueMember = "Codigo"
            .DisplayMember = "Texto"
        End With
    End Sub

End Module

Public Class FormularioDeEjemplo

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

        Dim SQL as String

        SQL = "SELECT ClienteId, ClienteNombre FROM Clientes " & _
                  "WHERE ClientePaisId = '034' " & _
                  "ORDER BY ClienteNombre"
        CargarComboDesdeSql(ComboClientes, SQL)

    End Sub

End Public

Uso de cookies

Este sitio utiliza cookies de terceros y propias para que tengas una mejor experiencia de navegación, puedas compartir contenido en redes sociales y para que podamos obtener estadísticas de los usuarios. Es importante que leas la presente política de cookies y comprendas que, si continúas navegando, consideraremos que aceptas su uso. política de cookies. Puede obtener más información sobre las cookies aquí. ACEPTAR

Aviso de cookies