You are on page 1of 7

Sres.

Desarrolladores, este artculo 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 artculo 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. Tambin para mostrar un grupo de casillas de verificacin se utiliza el control CheckedListBox. He publicado otros artculos 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_Com boBox.htm El control ListBox, Opciones principales: http://www.elguille.info/colabora/NET2005/FernandoLuque_El_Control_ListB ox.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_ControlesBasico s.htm Para no llenar de texto el artculo, les comento que en le ayuda de Visual Studio se encuentra la explicacin 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 coleccin

Uso dentro del cuadro de lista ListBox.ObjectCollection Contiene todos los elementos incluidos en el controlListBox. ListBox.SelectedObjectCollection Contiene una coleccin de los elementos seleccionados, que constituye un subconjunto de los elementos incluidos en el control ListBox. ListBox.SelectedIndexCollection Contiene una coleccin 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 cmo ListBox.ObjectCollection almacena los elementos de ListBox as como su estado de seleccin dentro de un control ListBox de ejemplo. ndice Elemento Estado de seleccin dentro del control ListBox No seleccionado Seleccionado No seleccionado Seleccionado Seleccionado

0 1 2 3 4

objeto1 objeto2 objeto3 objeto4 objeto5

En funcin de la clase ListBox.ObjectCollection que se muestra en la tabla anterior, esta tabla indica cmo aparecer la coleccinListBox.SelectedObjectCollection. ndice 0 Elemento objeto2

1 2

objeto4 objeto5

En funcin de la clase ListBox.ObjectCollection que se muestra en la tabla anterior, esta tabla indica cmo aparecer la coleccinListBox.SelectedIndexCollection. ndice 0 1 2 ndice de elemento 1 3 4

El mtodo Add de la clase ListBox.ObjectCollection permite agregar elementos a ListBox. El mtodo 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 mtodo ToString del objeto, a menos que se especifique un nombre de miembro del objeto en la propiedad DisplayMember. Para agregar elementos, adems del mtodo Addde la clase ListBox.ObjectCollection, puede usar tambin la propiedad DataSource de la clase ListControl. NUESTRO EJEMPLO En este artculo que comparto con ustedes seores 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 DataSource DisplayMember

ValueMember

ndice de elemento Especifica el origen de datos La columna del origen de datos que se mostrar 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 continuacin sigue cdigo en Visual Basic: Private Sub List03Campos(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLlenar.Click _

'Definir la cadena de Conexin 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 Dim dsDatos As New DataSet el DataSet DataTable Lista

'Llenar el daDatos.Fill(dsDatos, "Clientes") 'Para llenar la 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 Conexin

&

'' 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 cdigo completo est en el archivo adjunto al final del artculo, cualquier consulta al correo que se encuentra al inicio del artculo. No olvides dar tu voto en mi PanoramaBox. Suerte a todos y a seguir desarrollando. Ing. Fernando CIP Trujillo - Per Luque Snchez 61806

Espacios de nombres usados en el cdigo de este artculo: System.Data System.Data.SQLClient

Los controles de lista como ListBox, ComboBox y CheckedListBox (pueden visitar el artculo en http://www.elguille.info/colabora/puntoNET/FernandoLuque_Control es.htm) permiten el manejo de varias opciones, en este artculo trato de explicar el uso del control ComboBox. El ComboBox es uno de los controles de lista mas utilizados en las aplicaciones tanto de escritorio como ASP .Net, este es sumamente versastil, su propiedad DropDownStyle nos brinda presentarlo de forma variada. en el ejemplo he tratado de mostrar estas opciones. El ejemplo tambin muestra como ingresar una fecha considerando edades entre 17 y 90 aos. El botn Comprobar permite mostrar un mensaje si la fecha seleccionada es Correcta o Incorrecta. A continuacin sigue cdigo en Visual Basic Private Sub Cargar(ByVal sender As System.Object, ByVal e As System.Event Args) Handles MyBase.Load 'Llenar el Da Dim i As Integer For i = 1 To 31 cboDia.Items.Add(i) Next 'Llenar los Nombres de los Meses For i = cboMes.Items.Add(MonthName(i, False)) Next ingresar el rango para 'diferentes posibilidades...consideremos 'hasta las 90 aos = Year(Now) cboAnio.Items.Add(i) Next los aos mayores de 1 To 12

'Al

existen 18 aos 17

For i

90 To Year(Now)

End Sub Private Sub CompruebaFecha(ByVal sender As System.Object, ByVal e As Sy stem.EventArgs) HandlescmdComprobar.Click If cboDia.SelectedIndex -1 Or cboAnio.SelectedIndex = -1 Or cboMes.SelectedIndex = = -1 Then

MessageBox.Show("Faltan MessageBoxButtons.OK) Exit Sub End If Dim vfecha As String

datos...",

"Fecha

incompleta",

vfecha = Trim(cboDia.SelectedItem) & "/" & Trim(Str(cboMes.SelectedIndex + 1)) & "/" & Trim(cboAnio.SelectedItem) If Microsoft.VisualBasic.IsDate(vfecha) = False Then MessageBox.Show("Fecha no valida...", "Error de ingreso", MessageBoxButtons.OK) Else MessageBox.Show("Fecha CORRECTA...", "Dato Vlido", MessageBoxButtons.OK) End If End Sub