Visual Basic - Problemas con ListIndex en un ComboBox

Life is soft - evento anual de software empresarial
 
Vista:

Problemas con ListIndex en un ComboBox

Publicado por Fabian (3 intervenciones) el 07/07/2008 23:56:02
Hola gente, estoy luchando desde hace bastantes horas con esto y no
encuentro como solucionarlo. Es en Visual Basec 6.
Tengo un Form (abm de agenda de clientes) con cboProvincia y un cboLocalidad
de dicho cliente.
Al efectuar un alta, el cboLocalidad me muestra de forma correcta las
localidades de la provincia seleccionada en cboProvincia.
Ahora en una modificacion, yo leo el recordset con el registro del cliente y
asigno al cboProvincia la provincia correspondiente.Es decir, cargo la
provincia asi:
If IsNull(rsAgenda.Fields("Provincia")) Then
cboProvincia.Text = "" ' Si no tenia cargada provincia
el registro del cliente
Else
cboProvincia.Text = rsAgenda.Fields("Provincia") ' Si
tenia algo cargado
End If
Luego, si el registro tiene una localidad ya cargada la asigno a el .Text
del cboLocalidad de la misma forma y funciona ok.

PERO, (siempre hay uno, no ?) suponiendo que la localidad de ese reg. de
dicho cliente este en blanco, yo quiero que me despliegue las localidades
correspondientes a la provincia que le asigne a cboProvincia.Text.

Lo resolví asi: (o al menos intenté):

If cboProvincia.ListIndex <> -1 Then
rsLocalidad.Filter = "IDPROVINCIA=" &
cboDPProvincia.ItemData(cboDPProvincia.ListIndex)
Else
rsLocalidad.Filter = "IDPROVINCIA=" & -1 ' Fuerzo a que el
filtro vacíe el recordset pues no selecciono provincia
End If

Pero el tema es que por mas que yo le asigné: cboProvincia.Text =
rsAgenda.Fields("Provincia")
el cboProvincia.ListIndex me queda en -1 (es decir como si NO hubiera
seleccionado dicho elemento que asigné) Sé que en realidad no lo selecciona,
lo asigno pero quiero que esa asignacion luego funcione como si realmente el
usuario la hubiera seleccionado entonces el cboProvincia.ListIndex será
<> -1
PREGUNTA 1 ) ¿alguna pista de como resolverlo ?
PREGUNTA 2) Suponiendo que deje Provincia en Blanco, en localidades quiero
que tembien muestre el combo sin ninguna localidad, recien las muestro (las
que correspondan cuando seleccione la provincia). Ahora bien, si queda la
prov en blanco me tira error si uso: rsLocalidad.Filter =
"IDPROVINCIA=" & cboDPProvincia.ItemData(cboDPProvincia.ListIndex)
Es decir tuve que inventar la parte del Else del if para el caso en que no
seleccione la provincia. Y la verdad es que me quedó bsatante feo, pero, no
encontre en el manual como hacer para que el filtro deje el recordser en
blanco (no me refiero a borrarlo) sinó que me refiero a lo que hice forzando
en: rsLocalidad.Filter = "IDPROVINCIA=" & -1 siendo que no existirá
nunca un IDPROVINCIA = -1 Yo esto ultimo lo resolví asi pero pienso que debe
haber algo mas prolijo no ? O alguna forma Lógica de resolver el problema,
alguna idea ?
Es decir el ListIndex me está volviendo loco en ambas proguntas..

Bueno si me pueden ayudar con estas 2 consultas desde ya quedo muy
agradecido a Uds.
Fabian
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con ListIndex en un ComboBox

Publicado por pacopaz (173 intervenciones) el 08/07/2008 01:05:30
Si el estilo de tu combo es DropDownList (que debiese serlo), es mejor asignar el valor representado por el índice y no por el texto.
Así, lo que tendrías que hacer es, en vez de asignar directamente el texto, buscarlo en la lista del combo y lo que encontrase, ponerlo en el índice:

Dim i, indice As Integer

indice = -1
for i = 0 to combo.ListCount - 1
if combo.list(i) = provincia then indice = i
next i
combo.ListIndex = indice

De esta forma aseguras que el combo tenga un índice y que puedas hacer correctamente lo que le sigue.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con ListIndex en un ComboBox

Publicado por Fabian (3 intervenciones) el 08/07/2008 16:36:56
Gracias por tu respuesta PACOPAZ, no se si para bien o para mal, pero el combobox tiene style: 0 - dbcDropdownCombo. Te aclaro que yo le permito al usuario poder ir escribiendo en el combobox asi se le va posicionando en el elemento que comience con las teclas que presionó.
Entiendo lo de trabajar con el indice, en realidad lo que yo hago es en provincias:

If dcboDPPais.MatchedWithList Then
rsProvincia.Filter = "IDPAIS=" & dcboDPPais.BoundText
End If

cboDPProvincia.Clear
Do While Not rsProvincia.EOF
cboDPProvincia.AddItem rsProvincia.Fields("Provincia")
cboDPProvincia.ItemData(cboDPProvincia.NewIndex) = sProvincia.Fields("IDProvincia")
rsProvincia.MoveNext
Loop

Y luego en Localidades:

If cboDPProvincia.ListIndex <> -1 Then
rsLocalidad.Filter = "IDPROVINCIA=" & cboDPProvincia.ItemData(cboDPProvincia.ListIndex)
Else
rsLocalidad.Filter = "IDPROVINCIA=" & -1 ' Vacía el recordset pues no selecciono provincia
End If

cboDPLocalidad.Clear
Do While Not rsLocalidad.EOF
cboDPLocalidad.AddItem rsLocalidad.Fields("Localidad")
cboDPLocalidad.ItemData(cboDPLocalidad.NewIndex) = rsLocalidad.Fields("IDLocalidad")
rsLocalidad.MoveNext
Loop

Y como verás uso en localidades: If cboDPProvincia.ListIndex <> -1 Then
para saber si hay algo seleccionado en provincia, pero como pese a que le asigné el valor al combobox con cboDPProvincia.text = rsAgenda.Fields("Provincia") NI se entera el ListIndex que le asigne algo y me sigue dando -1.
Si yo pudiera hacer que no me de ese -1 estaría perfecto, todo me funcionaría.
Es decir como hago para que ese cboProvincia.Text = rsAgenda.Fields("Provincia")
Haga como si realmente el usuario lo hubiera seleccionado en el combobox.
Me explico, no se si se te ocurre algo al respecto.
De todas maneras tendré en cuenta lo que me sugerías en tu nota.
Gracias por tu tiempo Fabian
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con ListIndex en un ComboBox

Publicado por Fabian (3 intervenciones) el 08/07/2008 20:19:13
Hola PACOPAZ, estuve haciendo pruebas en un form nuevo y viendo con otros colegas (Victor) y no queda otra que luego de la asignacion al .TEXT del combo, indicarle cual es el nuevo Index del combo. Ya que que le asigne algo a .text no implica que sea lo que queda asignado, en realidad al mostrar el .text solo me muestra lo que el usuario escribio (o le asigné yo al .text) NO muestra lo que tiene asignado el combo. De ahi que hay que recorrer los elementos del combo y verificar si existe lo que escribi (o asigne en el .text).
En fin, que lindo es poder aprender algo todos los dias, y ni te cuento cuando es algo que uno necesita terminar pues lo corren los tiempos... Queria compartir esto contigo.
Gracias, Fabian
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con ListIndex en un ComboBox

Publicado por meryi (1 intervención) el 10/02/2011 19:59:29
hola amigos
tengo un problemita la cual es: Tengo que hacer un programa con un listindex o no se...para calcular el iva, tambien tiene que ir sin iva, esto va basado con el iva de objetos por ej : blusas, pantalones, medias, etc.
con lo que me puedan guiar muchas gracias y las lineas de codigo con Case
ok
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar