URGENTE... Llenar combobox VB.NET

Anuncio
URGENTE... Llenar combobox VB.NET
01-11-2005, 6:11 JorgeLandaeta
Buenos Días, estoy llenando un combobox (se llama name) y el dropdownstyle lo
coloqué en dropdownlist:
Dim strConn As String = "Server=myservr;Password=mypass;Persist Security
Info=True;User ID=sa;Initial Catalog=mydb"
Dim sql As String = "Select * from mytbl"
Dim conn As New SqlConnection(strConn)
Dim objDR As SqlDataReader
Dim Cmd As New SqlCommand(sql, conn)
conn.Open()
Dim count As Integer
objDR = Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
name.Items.Add(New ListItem("Name", 0))
--- OJO NO ME DEJA COLOCAR ESTA PROPIEDAD LISTITEM EN ASPX
FUNCIONABA --While objDR.Read
name.Items.Add(New ListItem(objDR("firstn"))
End While
--- OJO AQUÍ TAMPOCO ME DEJA COLOCAR ESTA PROPIEDAD LISTITEM EN
ASPX
FUNCIONABA --Acaso la manera de llenar un combobox varía en VB.NET y ASPX?
Si alguien pudiera ayudarme con esto lo agradecería
Yo conozco tres maneras bsicas de hacer eso, quiz alguin conozca alguna
ms:
1) Llenar un DataTable con DataAdapter, enlazar el DataTable al combo y
establecer las propiedades ValueMember y DisplayMember. Por ejemplo:
Private Sub LlenarCombo1()
Dim cn As New
SqlConnection("Server=(local);Database=Northwind;Trusted_Connection=Yes")
Dim Adapter As New SqlDataAdapter("select CategoryId, CategoryName
from Categories", cn)
Dim table As New DataTable
Adapter.Fill(table)
Me.ComboBox1.DisplayMember = "CategoryName"
Me.ComboBox1.ValueMember = "CategoryId"
Me.ComboBox1.DataSource = table
End Sub
En este caso ComboBox1.SelectedValue nos da el valor de CategoryId
seleccionado y ComboBox1.SelectedItem nos da un DataRowView con todos los
campos devueltos por la select
2) Crear una clase con las propiedades id y nombre, reescribir el mtodo
ToString y aadir objetos de esta clase a la coleccin Items del combo. Por
ejemplo:
Public Class Category
Private mCategoryId As Integer
Public Property CategoryId() As Integer
Get
Return mCategoryId
End Get
Set(ByVal Value As Integer)
mCategoryId = Value
End Set
End Property
Private mCategoryName As String
Public Property CategoryName() As String
Get
Return mCategoryName
End Get
Set(ByVal Value As String)
mCategoryName = Value
End Set
End Property
Public Overrides Function ToString() As String
Return CategoryName
End Function
End Class
Private Sub LlenarCombo2()
Dim cn As New
SqlConnection("Server=(local);Database=Northwind;Trusted_Connection=Yes")
Dim cmd As New SqlCommand("select CategoryId, CategoryName from
Categories", cn)
Dim reader As SqlDataReader
cn.Open()
reader = cmd.ExecuteReader()
While reader.Read
Dim Category As New Category
Category.CategoryId = reader("CategoryID")
Category.CategoryName = reader("CategoryName")
Me.ComboBox1.Items.Add(Category)
End While
reader.Close()
cn.Close()
End Sub
En este caso ComboBox1.SelectedItem nos da un objeto de tipo Category.
Podramos tener una propiedad como esta en el formulario:
Private ReadOnly Property SelectedCategory() As Category
Get
Return Me.ComboBox1.SelectedItem
End Get
End Property
3) Llenar una coleccin ( IList ) de objetos , y enlazar el combo con esta
coleccin estableciendo las propiedades ValueMember y DisplayMember. Por
ejemplo usando un ArrayList:
Private Sub LlenarCombo3()
Dim Categories As New ArrayList
Dim cn As New
SqlConnection("Server=(local);Database=Northwind;Trusted_Connection=Yes")
Dim cmd As New SqlCommand("select CategoryId, CategoryName from
Categories", cn)
Dim reader As SqlDataReader
cn.Open()
reader = cmd.ExecuteReader()
While reader.Read
Dim Category As New Category
Category.CategoryId = reader("CategoryID")
Category.CategoryName = reader("CategoryName")
Categories.Add(Category)
End While
reader.Close()
cn.Close()
Me.ComboBox1.DisplayMember = "CategoryName"
Me.ComboBox1.ValueMember = "CategoryID"
Me.ComboBox1.DataSource = Categories
End Sub
En este caso ComboBox1.SelectedValue es el valor de la propiedad CategoryID
seleccionada. Adems ComboBox1.SelectedItem es el objeto de la clase
Category seleccionado
Saludos:
Jess Lpez
MVP
OTRA WEB
"jcpinto" escribió:
>
>
>
>
>
Esto ya lo he solucionado. En otro hilo encontré la respuesta de un
compañero:
Por si a alguien le sirve, hay que cambiar el "modo de actualización
del origen de datos" a "Never" de la propiedad Text.
Hola:
Ignoro a qué te refieres con establecer el valor "Never" al "modo de
actualización del origen de datos" de la propiedad Text. ¿?
>
>
>
>
No obstamte, ahora me da un error, y es que me dice que no se puede
dejar nulo el valor del combobox, pues así lo exije la base de datos.
Luego no me toma el valor del combobox...
alguna otra cosilla??
Pues dependerá de cómo hayas configurado el control ComboBox.
Quita todos los enlaces a datos del control ComboBox que hayas configurado
en tiempo de diseño, y en el evento Load del formulario, enlaza el control
de la siguiente manera, y EN EL MISMO ORDEN en el que lo indico:
' Creamos un adaptador de datos para rellenar
' el objeto DataTable de provincias
'
Dim da As New OleDb.OleDbDataAdapter( _
"SELECT * FROM Provincias", _
Me.MunicipiosTableAdapter.Connection)
Dim dtProvincias As New DataTable("Provincias")
da.Fill(dtProvincias)
With IdComboBox
.DataBindings.Add(New Binding("SelectedValue", _
MunicipiosBindingSource, _
"IdProvincia"))
.DataSource = dtProvincias
.DisplayMember = "Nombre"
.ValueMember = "IdProvincia"
End With
' Por último, rellenamos el objeto TableAdapter correspondiente
' a los Municipios.
'
Me.MunicipiosTableAdapter.Fill(Me.Bd1DataSet.Municipios)
Como podrás observar, en lugar de enlazar la propiedad «Text» del control
ComboBox, he enlazado la propiedad «SelectedValue», y he asignado a la
propiedad «DataSource» del control ComboBox un objeto DataTable, para
posteriormente asignar las propiedades «DisplayMember» y «ValueMember».
Por supuesto, deberás de modificar los nombres de los objetos, consulta SQL
de selección, etc., para que el ejemplo se adapte a tus necesidades. En
definitiva, el ejemplo asume que en tu base de datos tienes dos tablas
llamadas Municipios y Provincias, las cuales están relacionadas por un campo
común llamado «IdProvincia».
Un saludo
-Enrique Martínez
[MS MVP - VB]
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.
Descargar