Ayuda con ComboBox

Iniciado por proteus8, 9 Marzo 2011, 12:53 PM

0 Miembros y 1 Visitante están viendo este tema.

proteus8

muchachos muchas gracias por su ayuda, los combobox que lleno de forma manual los deje funcionando como quería , lo hice de esta manera:_

ComboBox12.Items.Insert(0, "SELECCIONE...")
ComboBox12.SelectedIndex = 0

con lo que aun estoy pegado es con los combobox que lleno con la base de datos.


proteus8

#11
Cita de: Novlucker en  9 Marzo 2011, 16:57 PM
Puedes poner los códigos?

Saludos
Novlucker este es mi codigo:
Novlucker así puse el código que me dijiste:
Código (vbnet) [Seleccionar]
Dim adp2 As New SQLiteDataAdapter("select MED_MARCA from cmb_medidores ", cnnloc2)
       adp2.Fill(vds2, "CMB_MEDIDORES")
       ComboBox1.DataSource = vds2.Tables("CMB_MEDIDORES")
       ComboBox1.DisplayMember = "MED_MARCA"
       DataRow(dr = vds2.Tables("CMB_MEDIDORES").NewRow())
       dr[0] = "SELECCIONE..." 'El valor que quieras
       dr([x] = "MED_MARCA") 'La que sea que estes mostrando en el combobox
       vds2.Tables("CMB_MEDIDORES").Rows.InsertAt(dr, 0)

Novlucker

Intenta cambiando los valores de la tabla antes de enlazarla al combobox y realizar el databind.

Espero que estes cambiando esa x que puse a modo de ejemplo en la columna del datarow

¿Y el otro que dices que se muestra vacio? estas cargando antes los valores al combobox en el onLoad de tu formulario?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

proteus8

Novlucker
gracias nuevamente,

si, lo los valores vacíos ya quedo solucionado.

con los del datarow lo que me pasa es que me da el siguiente error:

  ("DataRow" es un tipo y no se puede usar como expresión)

Novlucker

Ahora lo veo, por que pones esos paréntesis donde no van? :huh:
Código (csharp) [Seleccionar]
DataRow(dr = vds2.Tables("CMB_MEDIDORES").NewRow())
Además, no veo que hayas convertido nada a VB.NET
Código (vbnet) [Seleccionar]
Dim dr as DataRow
dr = 'bla bla bla


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

[D4N93R]

Luego de que le pasas el DataSource, dale DataBind, y luego agregas los Items. Si te falla create una clase POCO para esa entidad y las metes en una lista, la cual lleva como primer item uno que dice "Seleccione"

Esa lista la metes en el data source. y Listo funciona.

Un saludo!

proteus8

muchas gracias a todos, y disculpen por ser tan cabeza dura pero es que soy nuevo en esto de vb.net es mas esto es casi lo primero que hago, me podrían poner un ejemplo de como hacerlo, si no es mucha la molestia.
desde ya muchas gracias.

seba123neo

confieso que yo nunca he usado las propiedades .DataSource y .DisplayMember de los combo para trabajar con ellos, lo hago a la "vieja escuela".

simplemente hago una consulta y que me devuelva un datareader, ese datareader lo recorro y voy llenando el combo con "items.add" y listo...si quiero cambio valores al vuelo por asi decirlo, o sea tengo mas control sobre los datos que me vienen y si quero hacer concatenaciones o alguna logica en el codigo, o si queres agregar mas items todavia a los que te vienen podes hacerlo, con este metodo me lo permite, es como llenar un listview digamos.

aca te paso un ejemplo, si queres usalo.

Código (vbnet) [Seleccionar]
    Private Sub CargarCombo()

        Dim drDatos As SqlDataReader = oUsuarios.TraerUsuarios ' aca dentro hago la consulta que devuelve el datareader con los registros

        cmbUsuarios.Items.Clear()

        While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
            cmbUsuarios.Items.Add(New Combo_itemData(drDatos("nombre"), drDatos("id")))
        End While

        drDatos.Close()
        drDatos = Nothing
    End Sub


esa clase "New Combo_itemData" es una clase que imita la propiedad ItemData del visual basic 6, si no lo sabes te explico que la propiedad ItemData era para almacenar un "id" para identificar el item al seleccionarlo, como en vb net no esta mas esta propiedad, hay que hacer una clase aparte que lo imita, aca te explica bien el guille como hacerla.

ItemData en .NET

si vos queres agregar un item por defecto al combo por ejemplo "SELECCIONE..."
, es facil, en el codigo anterior, despues de usar el Clear() para limpiar el combo, debes agregar un Item. lo tenes que hacer antes de entrar al bucle del While, entonces por mas que el datareader no tenga datos, el item "SELECCIONE..." siempre va a estar.

te quedaria asi:

Código (vbnet) [Seleccionar]
Private Sub CargarCombo()

        Dim drDatos As SqlDataReader = oUsuarios.TraerUsuarios ' aca dentro hago la consulta que devuelve el datareader con los registros

        cmbUsuarios.Items.Clear()

        cmbUsuarios.Items.Add(New Combo_itemData("SELECCIONE...", "...")) ' item por defecto

        While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
            cmbUsuarios.Items.Add(New Combo_itemData(drDatos("nombre"), drDatos("id")))
        End While

        drDatos.Close()
        drDatos = Nothing
    End Sub


el item "SELECCIONE..." siempre va a estar en la posicion indice 0 del combo, por lo tanto es facil validarlo despues al momento de saber cual item seleccionaste.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

proteus8

seba123neo gracias por tu ayuda,hice lo que me dijiste y me quedo de esta manera el código:
Código (vbnet) [Seleccionar]
   consulta = String.Format("select MED_MARCA from cmb_medidores ")
        Dim Sqlstr As New SQLiteCommand(consulta, cnnloc2)
        Dim drDatos As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection) ' aca dentro hago la consulta que devuelve el datareader con los registros
        ComboBox1.Items.Clear()
        ComboBox1.Items.Add(New Combo_itemData("SELECCIONE...", "...")) ' item por defecto
        While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
            ComboBox1.Items.Add(New Combo_itemData(drDatos("MED_MARCA"), drDatos("id")))
        End While

        drDatos.Close()
        drDatos = Nothing


pero me da error en la siguiente linea:

ComboBox1.Items.Add(New Combo_itemData(drDatos("MED_MARCA"), drDatos("id")))
me dice algo como "IndexOutOfRangeException"

"MED_MARCA" es el campo de mi base de datos que quiero mostrar en el combobox



seba123neo

eso es un error de campo, el campo "id" existe ?

CitarComboBox1.Items.Add(New Combo_itemData(drDatos("MED_MARCA"), drDatos("id")))

ese lo habia puesto yo de ejemplo, vos cambialo por el campo que identifique al registro.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson