Controles de Lista enlazados a Base de datos

Como llenar ListBox, ComboBox y CheckedListBox 

Fecha: 13/Jul/2005 (08 de Julio de 2005)
Autor: Ing. Fernando Luque Sánchez  --  DCE   4  Estrellas

[email protected]


Sres. Desarriolladores, este artículo pretende  mostrar como enlazar los controles de lista ListBox, ComboBox y CheckedListBox al contenido de una tabla en una base de datos de SQL Server.

En el artículo que comparto con ustedes utilizo las tablas Customers, Products y Region de la base de datos Northwind.

UN POCO DE TEORIA

En las aplicaciones de escritorio son muy utilizados los controles de lista, especialmente los controles ListBox y ComboBox. También para mostrar un grupo de casillas de verificación se utiliza el control CheckedListBox.

He publicado otros artículos que muestran el uso de estos controles pero sin enlace a base de datos:

El control ComboBox:
http://www.elguille.info/colabora/NET2005/FernandoLuque_El_Control_ComboBox.htm

El control ListBox, Opciones principales:
http://www.elguille.info/colabora/NET2005/FernandoLuque_El_Control_ListBox.htm

Controles en Visual Basic .Net - El control CheckedListBox:
http://www.elguille.info/colabora/puntoNET/FernandoLuque_Controles.htm

Controles de Lista en Visual Basic .Net
http://www.elguille.info/colabora/NET2005/FernandoLuque_ControlesBasicos.htm

Para no llenar de texto el artículo, les comento que en le ayuda de Visual Studio se encuentra la explicación detallada de como manejar estos controles, les incluyo una parte:

Las propiedades Items, SelectedItems y SelectedIndices proporcionan acceso a las tres colecciones que ListBox utiliza. En la tabla siguiente se presentan las tres colecciones que ListBox utiliza y se indica su uso dentro del control.

Clase de colección Uso dentro del cuadro de lista
ListBox.ObjectCollection Contiene todos los elementos incluidos en el control ListBox.

ListBox.SelectedObjectCollection

 

Contiene una colección de los elementos seleccionados, que constituye un subconjunto de los elementos incluidos en el control ListBox.

ListBox.SelectedIndexCollection

 

Contiene una colección de los índices seleccionados, que constituye un subconjunto de los índices de ListBox.ObjectCollection. Estos índices especifican los elementos seleccionados.

En los tres ejemplos siguientes se muestran las tres colecciones indizadas que admite la clase ListBox.

En la tabla siguiente, se muestra un ejemplo de cómo ListBox.ObjectCollection almacena los elementos de ListBox así como su estado de selección dentro de un control ListBox de ejemplo.

Índice Elemento Estado de selección dentro del control ListBox
0 objeto1 No seleccionado
1 objeto2 Seleccionado
2 objeto3 No seleccionado
3 objeto4 Seleccionado
4 objeto5 Seleccionado

En función de la clase ListBox.ObjectCollection que se muestra en la tabla anterior, esta tabla indica cómo aparecerá la colección ListBox.SelectedObjectCollection.

Índice Elemento
0 objeto2
1 objeto4
2 objeto5

En función de la clase ListBox.ObjectCollection que se muestra en la tabla anterior, esta tabla indica cómo aparecerá la colección ListBox.SelectedIndexCollection.

Índice Índice de elemento
0 1
1 3
2 4

El método Add de la clase ListBox.ObjectCollection permite agregar elementos a ListBox. El método Add puede aceptar cualquier objeto al agregar un miembro a ListBox. Cuando se agrega un objeto a ListBox, el control utiliza el texto definido en el método  ToString del objeto, a menos que se especifique un nombre de miembro del objeto en la propiedad DisplayMember. Para agregar elementos, además del método Add de la clase ListBox.ObjectCollection, puede usar también la propiedad DataSource de la clase ListControl.

NUESTRO EJEMPLO

En este artículo que comparto con ustedes señores desarrolladores, les muestro como llenar los controles con los elementos de una base de datos de dos formas:

  1. Mostrando varios campos de una tabla o lo que es lo mismo varias columnas de un DataTable  haciendo un recorrido por este. Por ejemplo:

    Dim i As Integer
    For i = 0 To dsDatos.Tables("Productos").Rows.Count - 1
                'Llenar ProductId, ProductName y UnitPrice
                Dim vdato As String
                vdato = dsDatos.Tables("Productos").Rows(i).Item(0).ToString
                vdato &= Space(5) & dsDatos.Tables("Productos").Rows(i).Item(1).ToString
                vdato &= Space(5) & dsDatos.Tables("Productos").Rows(i).Item(5).ToString
               
    cboTres.Items.Add(vdato)
    Next

  2. Especificando las propiedades de los controles de Lista DataSource, DisplayMember y ValueMember, de esta forma se especifica como sigue:

Propiedad Índice de elemento
DataSource Especifica el origen de datos
DisplayMember La columna del origen de datos que se mostrará
ValueMember El dato que se utilizará como elemento a seleccionar.

Por ejemplo:

cboTodos.DataSource = dsDatos.Tables("Productos")
cboTodos.DisplayMember = dsDatos.Tables("Productos").Columns(1).ToString
cboTodos.ValueMember = dsDatos.Tables("Productos").Columns(0).ToString

 


A continuación sigue código en Visual Basic:

Private Sub List03Campos(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdLlenar.Click

          'Definir la cadena de Conexión
        Dim cn As New SqlConnection("workstation id=HOME;packet size=4096;user id=fernnado;integrated security=SSPI;data source=(local);persist security info=False;initial catalog=Northwind")

        'Crear el SQLDataAdapter
        Dim daDatos As New SqlDataAdapter("Select * from Customers", cn)

        'Crear el DataSet
        Dim dsDatos As New DataSet

        'Llenar el DataTable
        daDatos.Fill(dsDatos, "Clientes")

        'Para llenar la Lista
        lstClientes01.Items.Clear()  'Borrar los datos que tenga

        Dim i As Integer
        For i = 0 To dsDatos.Tables("Clientes").Rows.Count - 1
            'Llenar CustomerId, CompanyName, ContactName
            Dim vdato As String
            vdato = dsDatos.Tables("Clientes").Rows(i).Item(0).ToString
            vdato &= Space(5) & dsDatos.Tables("Clientes").Rows(i).Item(1).ToString
            vdato &= Space(5) & dsDatos.Tables("Clientes").Rows(i).Item(2).ToString
            lstClientes01.Items.Add(vdato)
        Next
    End Sub

    Private Sub ListTodosCampos(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdLlenar01.Click  

        'Definir la cadena de Conexión  

        ''  ES CIERTO....LA PUEDO DEFINIR EN LA ZONA DE DECLARACIONES
        ''  Y LUEGO INSTANCIARLA EN CADA PROCEDIMIENTO ...

        Dim cn As New SqlConnection("workstation id=HOME;packet size=4096;user id=fernnado;integrated security=SSPI;data source=(local);persist security info=False;initial catalog=Northwind")
        'Crear el SQLDataAdapter
        Dim daDatos As New SqlDataAdapter("Select * from Customers", cn)
        'Crear el DataSet
        Dim dsDatos As New DataSet
        'Llenar el DataTable
        daDatos.Fill(dsDatos, "Clientes")

        'Para llenar la lista solo basta especificar las 
        'propiedades DataSource, DisplayMember y ValueMember
        lstClientes02.DataSource = dsDatos.Tables("Clientes")
        lstClientes02.DisplayMember = dsDatos.Tables("Clientes").Columns(1).ToString
        lstClientes02.ValueMember = dsDatos.Tables("Clientes").Columns(0).ToString
    End Sub

El código completo está en el archivo adjunto al final del artículo, cualquier consulta al correo que se encuentra al inicio del artículo. No olvides dar tu voto en mi PanoramaBox. Suerte a todos y a seguir desarrollando.

Ing. Fernando Luque Sánchez
CIP 61806
Trujillo - Perú


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SQLClient


Fichero con el código de ejemplo: FernandoLuque_ControlesListaBD.zip - Tamaño  8 KB


ir al índice