Hola amigos, quisiera que me ayudaran en lo siguiente: en mi proyecto tengo 2 tipos de combobox unos que me muestran datos de una base de datos y otros que los llene manualmente en la propiedad ítems,
Los que lleno con la base de datos lo hago de la siguiente manera:
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"
Lo que quiero hacer es que estos siempre me muestren como primer item en la lista un "Seleccione una Opccion..."
Como Puedo Hacer esto?
Con los que lleno manualmente tengo el siguiente problema siempre el primer item que muestran es vacio, me gutaria hacer lo mismo con estos que como primer item me muestre "Seleccione una Opccion...", en estos agregue ese item pero me sigue mostrando como primero el vacio.
Por favor solicito su ayuda.
No agregues otro item, sino cambia el combox1.text a ver q sale
No funciono!!!, sigue todo igual... :(
En el que ingresas los datos de manera manual, deberías de hacer algo como combobox.Items.Insert(0,"Seleccione una opcion...")
Para el que el ingreso es desde el DataAdapter no puedes hacer lo mismo y daría un error de que esta seteado el DataSource, por lo que la modificación debe de ser directamente en la fuente de datos con un DataRow
DataRow dr = vds2.Tables("CMB_MEDIDORES").NewRow()
dr[0] = 50057 'El valor que quieras
'.
'.
'.
'.
dr[x] = "Seleccione una opcion..." 'La que sea que estes mostrando en el combobox
vds2.Tables("CMB_MEDIDORES").Rows.InsertAt(dr,0)
Luego realizas el binding. Lo he hecho pensando en sharp, pero tiene que ser igual
Saludos
Te entendi mal creo, perdon por meterme donde no debo xD
Muchas gracias Novlucker por tu ayuda, pero me da error
con los que se cargan con la base de datos dice:
me dice que ("DataRow" es un tipo y no se puede usar como expresión)
con los otros no me da error y si me muestra en el listado el item "Seleccione..." pero al ingresar al formulario por primera ves me muestra vació.
XXX-ZERO-XXX
No se preocupe maestro lo que importa es la intensión, a si que gracias.
Puedes poner los códigos?
Saludos
Buenas, prueba esto:
cuando hayas cargado los items, haz lo siguiente, creo que esto es lo que he entendido que quieres conesguir.
comboBox1.SelectedItem = -1;
comboBox1.Text = "Seleccione...";
Cuando lo pruebes me cuentas ;)
SRVAM, eso es lo q le dije pero no le funciono xD
pero ademas de cambiar el combobox.text hay que seleccionar el item -1, asi no hay que agregar otro item como tu dijiste, pero si hacemos que no haya ningun item seleccionado, entonces si se cambia la propiedad .Text del combo ;)
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.
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:
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)
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
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)
Ahora lo veo, por que pones esos paréntesis donde no van? :huh:
DataRow(dr = vds2.Tables("CMB_MEDIDORES").NewRow())
Además, no veo que hayas convertido nada a VB.NET
Dim dr as DataRow
dr = 'bla bla bla
Saludos
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!
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.
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.
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 (http://www.elguille.info/colabora/puntoNET/alvaritus_ItemDataEnNet.htm)
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:
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.
seba123neo gracias por tu ayuda,hice lo que me dijiste y me quedo de esta manera el código:
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
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.