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.