La definición de agregar elementos se da por lo siguiente:
ListBox.Item.Add( item as Object)
Es decir los elementos posibles que puedes agregar puede se cualquier objeto que podamos crear o que existen, por ejemplo:
'Creamos la Clase Persona
Public Class Persona
Sub New(ByVal snombre As String)
Nombre = snombre
End Sub
Private _nombre As String
Public Property Nombre() As String
Get : Return _nombre : End Get
Set(ByVal value As String) : _nombre = value : End Set
End Property
End Class
Y Cuando agregamos los elementos a un ListBox se agregaran las personas creadas, por ejemplo creamos dos personas Carlos y Laura (cmbCategoria es un comboBox que mantienen lo mismo como un ListBox)
Dim p1 As New Persona("Carlos")
Dim p2 As New Persona("Laura")
Me.cmbCategoria.Items.Add(p1)
Me.cmbCategoria.Items.Add(p2)
Al mostrar uno de los elementos que contiene el ListBox será de la siguiente forma:
Dim p3 As Persona
p3 = Me.cmbCategoria.Items(0)
MsgBox(p3.Nombre)
Y tenemos que tener en cuenta que la propiedad SelectedItem, lo que nos devolverá será el objeto añadido en este caso nos devuelve el objeto Persona.
Cuando llenamos un ListBox mediante un DataSet , se tiene que enlazar mediante el DatoSource del objeto e indicarle que columna mostrar, veamos:
ListBox.DataSource=DataSet.Tabla
ListBox.DisplayMember="Columna a mostrar"
De esta forma los elementos agregados al ListBox serán objetos del tipo DataRowViews
ListBox.Item.Add( item as DataRowView)
Y deben ser tratados así.
Realicemos el siguiente ejemplo, primero tenemos que crear el siguiente formulario
Luego debemos tener una variable de ámbito publico del formulario, que representara el DataSet:
Dim ds As New DataSet
Luego crearemos un método con el nombre LLenaDataSet, el cual realizara el llenado de las dos tablas Categorías y Productos
Sub LlenaDataset()
Try
xCon = New SqlConnection(strCon)
xCon.Open()
Dim sql As String = "Select CategoryID, CategoryName from Categories"
Dim AdCat As New SqlDataAdapter(sql, xCon)
AdCat.Fill(ds, "Categorias")
sql = "Select ProductID,CategoryId, ProductName,QuantityPerUnit, " + _
"UnitPrice from Products"
Dim AdPrd As New SqlDataAdapter(sql, xCon)
AdPrd.Fill(ds, "Productos")
ds.Relations.Add("FK_Cat_Prd", ds.Tables("Categorias").Columns("CategoryId"), _
ds.Tables("Productos").Columns("CategoryId"))
xCon.Close()
Catch ex As Exception
MsgBox("Sucedio un error...")
End Try
En el evento load del formulario colocaremos lo siguiente:
LlenaDataset()
Me.cmbCategoria.DataSource = ds.Tables("Categorias")
Me.cmbCategoria.DisplayMember = "CategoryName"
Me.dgProductos.Columns(0).Visible = False
Me.dgProductos.Columns(1).Visible = False
Finalmente en el evento SelectedIndexChanged del ComboBox colocaremos la validación que al cambiar de una categorías mostraremos los productos asociados a dicha categoría.
'Como se ve el elemento devuelto por el SelectedItem es un DataRowView:
Dim dr As DataRowView = Me.cmbCategoria.SelectedItem
'Modificamos la vista por defecto que tiene todo DataTable:
ds.Tables("Productos").DefaultView.RowFilter = "CategoryID=" + dr.Item(0).ToString
'Mostramos la vista por defecto modificada:
Me.dgProductos.DataSource = ds.Tables("Productos").DefaultView
Bueno espero que les haya sido de ayuda este pequeño artículo, Saludos.