none
Llenar ComboBox en VB 2005

    Pregunta

  •  

    Hola amigos... tengo la siguiente consulta... antes, en Visual Basic 6.0 para llenar un ComboBox y reasignar un nuevo indice al elemento agregado se hacia con un código como el siguiente...

     

     

    Set Tb = Db.OpenRecordset("Select * From tipocambio order by CodTipo")
    While Not Tb.EOF
        CboMoneda.AddItem Trim(Tb!DescTipo)
        CboMoneda.ItemData(CboMoneda.NewIndex) = Tb!codtipo
        Tb.MoveNext
    Wend
    Tb.Close

     

    ¿Como puedo hacer esto mismo pero en Visual Basic 2005?

     

    Saludos a todos...

    viernes, 26 de octubre de 2007 3:38

Respuestas

  • Pues Fran te lo ha dejado cerca. Retomo su ejemplo y cambio la forma en que cargamos los datos al Combo:

     

    Bloque de código

    Dim conex As New SqlClient.SqlConnection("MIconexion")

    Dim da As New SqlClient.SqlDataAdapter("Select * From tipocambio order by CodTipo", conex)

    Dim ds As New DataSet

    da.Fill(ds)

    combo.DataSource = ds.Tables(0)

    combo.DisplayMember = "Descripcion"

    combo.ValueMember = "Clave"

     

     

     

    Con DisplayMember indicas que campo mostrarás, pero con ValueMember indicas que campo quieers que sirva como clave de la selección.

     

    combo.SelectedValue -> Retornará la clave que no se muestra en la Combo

    combo.Text -> Retornará la descripción que se muestra en la Combo

     

    Espero no haberme desviado del tema...

    viernes, 26 de octubre de 2007 14:08
    Moderador

Todas las respuestas

  • Hola,

     

    Mira este código a ver si te vale:

    Bloque de código

     

    Dim conex As New SqlClient.SqlConnection("MIconexion")

    Dim da As New SqlDataAdapter("Select * From tipocambio order by CodTipo", conex)

    Dim ds As New DataSet

    da.Fill(ds)

    For i As Integer = 0 To ds.Tables(0).Rows.Count

    ' Aqui metes un valor o un objeto que luego podrás recuperar.

    combo.Items.Add(ds.Tables(0).Rows(i)("Nombre o número de la columna"))

    Next

     

     

    Un Saludo

    • Propuesto como respuesta Mint Man jueves, 12 de mayo de 2011 16:24
    viernes, 26 de octubre de 2007 7:11
    Moderador
  • Gracias nuevamente Fran... sabes.. yo hice esa rutina de código...

    El tema es que por ejemplo a parte de agregar esa descripcion al ComboBox, como se vió en el ejemplo de VB 6.0 asigno el mismo código de ese dato como nuevo Indice de lista...  para al momento de grabar los datos por ejemplo, poder grabar directamente con el ItemData(ListIndex) en el caso de VB 6.0 y no tener que hacer la busqueda del código cada vez que quiera grabar....

     

    como hago esto VB 2005??

     

    Gracias.

    viernes, 26 de octubre de 2007 13:48
  • Pues Fran te lo ha dejado cerca. Retomo su ejemplo y cambio la forma en que cargamos los datos al Combo:

     

    Bloque de código

    Dim conex As New SqlClient.SqlConnection("MIconexion")

    Dim da As New SqlClient.SqlDataAdapter("Select * From tipocambio order by CodTipo", conex)

    Dim ds As New DataSet

    da.Fill(ds)

    combo.DataSource = ds.Tables(0)

    combo.DisplayMember = "Descripcion"

    combo.ValueMember = "Clave"

     

     

     

    Con DisplayMember indicas que campo mostrarás, pero con ValueMember indicas que campo quieers que sirva como clave de la selección.

     

    combo.SelectedValue -> Retornará la clave que no se muestra en la Combo

    combo.Text -> Retornará la descripción que se muestra en la Combo

     

    Espero no haberme desviado del tema...

    viernes, 26 de octubre de 2007 14:08
    Moderador
  • Eso es, ahí está el tio !!!.

    Creo que eso te servirá, sino, ya nos comentas.

     

    Un Saludo

    viernes, 26 de octubre de 2007 16:24
    Moderador
  • eso era exactamente lo que necesitaba... muchas gracias toni...

     

    viernes, 26 de octubre de 2007 18:26
  • Muchas gracias a ti tambien Fran... me has sido de mucha ayuda en mi proyecto de título ya que estoy en pleno aprendizaje de Vb. Net 2005...

     

     

     

    viernes, 26 de octubre de 2007 18:29
  • Nada hombre, ha sido un placer, para cualquier cosilla por aquí andaré.

     

    Un Saludo

     

    viernes, 26 de octubre de 2007 18:31
    Moderador
  • Hola a tod@s:

     

    Yo en una aplicación, lo tengo como en el ejemplo que mostrais. En el datasource, pongo la table, en el displaymember el campo que quiero ver y en el valuemember el campo vinculado.

     El estilo que tengo puesto es dropdownlist, por lo cual no se puede elegir algún elemento que esté en la tabla. Pero lo que pretendo hacer, es que cuando no se quiera seleccionar ningún elemento de la lista, es añadir al combobox un item en el cual la descripción sea "Ninguno" y el valor para la clave sea 0. Pero he estado mirando y no se como hacerlo.

     

    Si me podeis indicar como puedo solucionar este tema, estaría muy agradecido.

     

    Un Saludo.

    Juan Carlos

    martes, 30 de octubre de 2007 21:59
  • Hola,

     

    Tan solo añade antes que los otros elementos el ese valor de la siguiente forma: combobox1.Items.Add("Ninguno")

    y luego añade esta otra línea: combobox1.SelectedIndex = 0 y así seleccionará el valor por defecto en Ninguno.

     

    Espero que te sirva,

     

    Un Saludo.

     

    martes, 30 de octubre de 2007 22:44
    Moderador
  • En mi caso como yo rescato las cosas desde una tabla de Sql Server 2000, lo que hice fue agregar un código 0 y una descripción "Por determinar"  a esa tabla... y con eso solucioné el problema.

     

    Ojalá te sirva mi sugerencia...

    Saludos

    miércoles, 31 de octubre de 2007 15:42
  • Hola Fran, muchas gracias por tu respuesto.

     

    Pero al intentar poner lo que me has comentado me dá el siguiente error: "No se puede modificar la colección Items cuando está establecida la propiedad DataSource.". Creo que este error se debe a que tengo el control desde diseño vinculado directamente al databindin, y aunque lo que tú me has indicado lo he puesto antes de llenar el combobox, me da el error que te he comentado. Lo que tiene este combobox es que no es obligatorio que tenga dato, pero si le selecciono alguno, no medeja luego des-seleccionarlo (es decir, dejar en blanco).

     

    Hola CiberMauro:

     

    Tambíen había contenplado lo que tú me indicas, pero lo malo es que tengo la tabla en modo autoincremento, por lo que no puedo controlar que el valor que le doy a "Ninguno" sea 0.

     

     

    Un Saludo.

    Juan Carlos

    sábado, 03 de noviembre de 2007 20:07
  • Hola elturle,

     

    Puedes agregar ese valor a tu tabla y luego una vez llenado el combobox, establecer el item que tu quieras como index del mismo. En este caso el valor "Ninguno".

     

    Un Saludo

     

    domingo, 04 de noviembre de 2007 11:30
    Moderador
  • Con ese código se llena pero desde una tabla o consulta, como hago para llenarlo desde un Procedimiento almacenado?

    Saludos

     

    richard

    viernes, 12 de septiembre de 2008 19:13
  • Hola ... lo que hice yo fue agregar al SP que tenia (que me trae la lista de valores):

    SELECT [id_Adicional],[Descripcion_Adicional]
    FROM [DistriSur].[dbo].[Adicional]

    esta sentencia ...

    UNION
    Select -1 as [clave], 'Sin Especificar' as [Campo]

    Me agrega con clave -1 el valor "Sin especificar" en el campo Descripcion ... cuando cargo el combobox con este resultado, primero aparece el "Sin especificar" (aunque en realidad no existe en la tabla origen)

    Slds
    Javier
    lunes, 13 de octubre de 2008 14:19
  • No te lies, si lo que quieres es unicamente que cuando aparezca el combobox aparezca sin ningún elemento seleccionado, después de cargar y hacerle fill a la tabla de turno en el dataset, le haces lo siguiente al combobox.

    comboboxTucombo.selectedIndex = -1;


    Y listo.
    martes, 21 de octubre de 2008 9:59
  • Hola mira personalmente yo he echo eso en un proyecto con el estilo de 3 capas, donde tengo una clase llamada pais y dentro de esa clase creo la funsion (cargar_pais), y en presentacion tengo un formulario llamado pais ahi agrega ese código que te paso. espero que le entiendas

     

    luego agrega este código a tu conexion a la base de datos

    Protected Function consultar(ByVal strSelect As String) As System.Data.DataSet
            Dim trnTemp As System.Data.SqlClient.SqlTransaction = Me.IniciarTransaccion()
            Dim dtsTemp As System.Data.DataSet = Me.consultar(strSelect, trnTemp)
            trnTemp.Commit()
            Return dtsTemp
     End Function

    Protected Function consultar(ByVal strSelect As String, ByVal trnTemp As System.Data.SqlClient.SqlTransaction) As System.Data.DataSet
            Dim adaTemp As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter      (strSelect,trnTemp.Connection)
            adaTemp.SelectCommand.Transaction = trnTemp
            Dim dtsTemp As System.Data.DataSet = New System.Data.DataSet
            adaTemp.Fill(dtsTemp)
            Return dtsTemp
    End Function

    capa de negocio

    public class pais

      public function cargar_pais()as dataset

        dim cade="select id_pais,nombre_pais from pais"

        return consultar(cade)

      end function

    end class

    capa de presentacion, formulario pais

    private sub cargar_pais

      dim obj as new negocio.pais ' negocio es una capa donde está la clase pais ahi una funcion llamada (cargar_pais) creas la consulta que la escrivo arriva

      dim ds as new dataset

      ds=obj.cargar_pais

      combobox1.datasource=ds.table(0)

      combobox1.valuemember="id_pais"

      combobox1.displaymember="nombre_pais"

    end sub

    luego en el load del formulario agregas el procedimiento (cargar_pais)

     

    Bueno, se que por ahi podria estar muy complicado y no le puedas entender al código pero cualquier dudas me preguntas nuevamente ok.

     

    correo

    mrodolfo.a@hotmail.com

     

    sábado, 15 de noviembre de 2008 14:50
  • hola que tal toni espero me puedas ayudar tengo una tabla proveedor con los campos idproveedor, razon social y ruc.
    yo lleno mi combo box con los registros del campo razon social lo que quiero es que al seleccionar cada registro de este combo box se llene 2 textbox q tengo con los registros de idproveedor y ruc. lo estoy haciendo con capas.
    tengo el siguiente codigo:


    EN EL Componente datos (CAPA DATOS)

    Public Function listarproveedor() As DataTable

            Try

                Dim dtTmp As New DataTable()

                Dim CNN As New SqlConnection(conexion.instancia.cadenaconexion)

                CNN.Open()

                Dim ConsultaSQL As New SqlCommand("Select nproveedor, razonsocial, ruc from Proveedor", CNN)

                ConsultaSQL.CommandType = CommandType.Text

                Dim dap As New SqlDataAdapter(ConsultaSQL)

                dap.Fill(dtTmp)

                CNN.Close()

                CNN.Dispose()

                Return dtTmp

            Catch ex As Exception

                Throw New Exception(ex.Message)

            Finally

            End Try

     

        End Function

    Componente presentación (CAPA PRESENTACION)

    Private Sub llenarcombo()

            With cbproveedor

                .DataSource = almacenpielesdalc.instancia.listarproveedor()

                .ValueMember = almacenpielesdalc.instancia.listarproveedor().Columns(0).ColumnName

                .DisplayMember = almacenpielesdalc.instancia.listarproveedor().Columns(1).ColumnName

            End With

        End Sub

    Private Sub AlmacenPieles_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

     

            Call Me.llenarcombo()

     

        End Sub

    TODO ESTE CODIGO ME PERMITE CARGAR MI COMBOBOX cbproveedor

    PERO LO QUE QUIERO ES QUE AL SELECCIONAR UN REGISTRO DE ESTE COMBO ME LLENE LOS TEXTBO CODIGOPROVEEDOR Y EL RUC ESO ES LO QUE NO SE COMO HACERLO. QUE PUEDO AGREGAR A ESTE CODIGO QUE TENGO

    GRACIAS POR ANTICIPADO TU AYUDA

    martes, 19 de mayo de 2009 3:33
  •  

    Hola a todos.
    Tengo una consulta para ver si me pueden ayudar. Tengo una BD con la tabla Doctores y otra con Pacientes y otra que se llama Citas. Tengo un form que muestra los datos en un listview, pero quiero poner un combobox que me muestre la cedula de la tabla doctores y en el listview que me muestre los pacientes que tienen una cita con ese Doctor o con ese numero de cedula. No se si me explico pero por ahi anda. Gracias.

    Estoy trabajando con vb.net 2005

    Tortugo
    lunes, 06 de julio de 2009 15:14
  • Me Parece muy bueno ese código me servio para solucionar otro problema....
    sábado, 01 de mayo de 2010 16:43
  • Pues Fran te lo ha dejado cerca. Retomo su ejemplo y cambio la forma en que cargamos los datos al Combo:

     

     

     

    Bloque de código

    Dim conex As New SqlClient.SqlConnection("MIconexion")

     

     

    Dim da As New SqlClient.SqlDataAdapter("Select * From tipocambio order by CodTipo", conex)

     

     

    Dim ds As New DataSet

    da.Fill(ds)

    combo.DataSource = ds.Tables(0)

    combo.DisplayMember =

     

    "Descripcion"

    combo.ValueMember =

     

    "Clave"

     

     

     

     

     

    Con DisplayMember indicas que campo mostrarás, pero con ValueMember indicas que campo quieers que sirva como clave de la selección.

     

    combo.SelectedValue -> Retornará la clave que no se muestra en la Combo

    combo.Text -> Retornará la descripción que se muestra en la Combo

     

    Espero no haberme desviado del tema...

    muy bueno y gracias a mi me sirvio de lujo
    miércoles, 01 de septiembre de 2010 4:06
  • Hola Toni, se que el tema es viejo pero es que tengo un grave problema con esto de los combobox y ya no se que hacer. Si hago lo que comentas aquí, resulta que al cambiar de elemento en el combo veo que se me sustituyo el ultimo valor que tenía seleccionado con el valor nuevo que selecciono. ¿Tienes idea de por qué ocurre esto? Gracias de antemano.
    viernes, 03 de diciembre de 2010 11:25
  • Hola, ¿alquién sabe como solucionar lo que digo? Tengo que terminar un programa y no puedo por este motivo... no consigo enlazar un combobox a una tabla y que me devuelva el valor del id, se va sustituyendo el ultimo valor que cojo con el anterior... :( gracias.
    jueves, 16 de diciembre de 2010 13:33
  • quetal toni espero que estes bien, tengo una duda este codigo que pones aqui lo e usado en VB 2010 para jalar datos de una tabla en sql 2008 y usarlo en un combo pero cuando lo corro no hace nada ni me marca error, porfavor si me pudieras ayudar te lo agradeceria.

    cuidate.

    jueves, 16 de febrero de 2012 22:21