Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: proteus8 en 9 Marzo 2011, 12:53 pm



Título: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 12:53 pm
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:

Código
  1. Dim adp2 As New SQLiteDataAdapter("select MED_MARCA from cmb_medidores ", cnnloc2)
  2. adp2.Fill(vds2, "CMB_MEDIDORES")
  3. ComboBox1.DataSource = vds2.Tables("CMB_MEDIDORES")
  4. 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.


Título: Re: Ayuda con ComboBox
Publicado por: Edu en 9 Marzo 2011, 14:23 pm
No agregues otro item, sino cambia el combox1.text a ver q sale


Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 15:18 pm
No funciono!!!, sigue todo igual...  :(


Título: Re: Ayuda con ComboBox
Publicado por: Novlucker en 9 Marzo 2011, 15:51 pm
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

Código
  1. DataRow dr = vds2.Tables("CMB_MEDIDORES").NewRow()
  2. dr[0] = 50057 'El valor que quieras
  3. '.
  4. '.
  5. '.
  6. '.
  7. dr[x] = "Seleccione una opcion…" 'La que sea que estes mostrando en el combobox
  8. vds2.Tables("CMB_MEDIDORES").Rows.InsertAt(dr,0)

Luego realizas el binding. Lo he hecho pensando en sharp, pero tiene que ser igual

Saludos


Título: Re: Ayuda con ComboBox
Publicado por: Edu en 9 Marzo 2011, 16:00 pm
Te entendi mal creo, perdon por meterme donde no debo xD


Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 16:56 pm
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.


Título: Re: Ayuda con ComboBox
Publicado por: Novlucker en 9 Marzo 2011, 16:57 pm
Puedes poner los códigos?

Saludos


Título: Re: Ayuda con ComboBox
Publicado por: SRVAM en 9 Marzo 2011, 17:24 pm
Buenas, prueba esto:

cuando hayas cargado los items, haz lo siguiente, creo que esto es lo que he entendido que quieres conesguir.
Código
  1.            comboBox1.SelectedItem = -1;
  2.            comboBox1.Text = "Seleccione...";

Cuando lo pruebes me cuentas ;)


Título: Re: Ayuda con ComboBox
Publicado por: Edu en 9 Marzo 2011, 18:09 pm
SRVAM, eso es lo q le dije pero no le funciono xD


Título: Re: Ayuda con ComboBox
Publicado por: SRVAM en 9 Marzo 2011, 18:16 pm
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 ;)


Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 19:01 pm
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.



Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 19:02 pm
Puedes poner los códigos?

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


Título: Re: Ayuda con ComboBox
Publicado por: Novlucker en 9 Marzo 2011, 19:18 pm
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


Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 19:32 pm
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)


Título: Re: Ayuda con ComboBox
Publicado por: Novlucker en 9 Marzo 2011, 19:42 pm
Ahora lo veo, por que pones esos paréntesis donde no van? :huh:
Código
  1. DataRow(dr = vds2.Tables("CMB_MEDIDORES").NewRow())
Además, no veo que hayas convertido nada a VB.NET
Código
  1. Dim dr as DataRow
  2. dr = 'bla bla bla

Saludos


Título: Re: Ayuda con ComboBox
Publicado por: [D4N93R] en 9 Marzo 2011, 20:50 pm
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!


Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 9 Marzo 2011, 21:24 pm
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.


Título: Re: Ayuda con ComboBox
Publicado por: seba123neo en 10 Marzo 2011, 06:15 am
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
  1.    Private Sub CargarCombo()
  2.  
  3.        Dim drDatos As SqlDataReader = oUsuarios.TraerUsuarios ' aca dentro hago la consulta que devuelve el datareader con los registros
  4.  
  5.        cmbUsuarios.Items.Clear()
  6.  
  7.        While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
  8.            cmbUsuarios.Items.Add(New Combo_itemData(drDatos("nombre"), drDatos("id")))
  9.        End While
  10.  
  11.        drDatos.Close()
  12.        drDatos = Nothing
  13.    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:

Código
  1. Private Sub CargarCombo()
  2.  
  3.        Dim drDatos As SqlDataReader = oUsuarios.TraerUsuarios ' aca dentro hago la consulta que devuelve el datareader con los registros
  4.  
  5.        cmbUsuarios.Items.Clear()
  6.  
  7.        cmbUsuarios.Items.Add(New Combo_itemData("SELECCIONE...", "...")) ' item por defecto
  8.  
  9.        While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
  10.            cmbUsuarios.Items.Add(New Combo_itemData(drDatos("nombre"), drDatos("id")))
  11.        End While
  12.  
  13.        drDatos.Close()
  14.        drDatos = Nothing
  15.    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.


Título: Re: Ayuda con ComboBox
Publicado por: proteus8 en 10 Marzo 2011, 13:26 pm
seba123neo gracias por tu ayuda,hice lo que me dijiste y me quedo de esta manera el código:
Código
  1.   consulta = String.Format("select MED_MARCA from cmb_medidores ")
  2.        Dim Sqlstr As New SQLiteCommand(consulta, cnnloc2)
  3.        Dim drDatos As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection) ' aca dentro hago la consulta que devuelve el datareader con los registros
  4.        ComboBox1.Items.Clear()
  5.        ComboBox1.Items.Add(New Combo_itemData("SELECCIONE...", "...")) ' item por defecto
  6.        While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
  7.            ComboBox1.Items.Add(New Combo_itemData(drDatos("MED_MARCA"), drDatos("id")))
  8.        End While
  9.  
  10.        drDatos.Close()
  11.        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




Título: Re: Ayuda con ComboBox
Publicado por: seba123neo en 11 Marzo 2011, 00:09 am
eso es un error de campo, el campo "id" existe ?

Citar
ComboBox1.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.