ComboBox dependientes (Ciudad vs comunas)

199 views
Skip to first unread message

Carlos Muñoz G.

unread,
Oct 6, 2020, 4:28:00 PM10/6/20
to Comunidad de Visual Foxpro en Español
Hola comunidad
tengo 3 ComboBox que ahora están independientes, pero necesito que sean dependientes entre si, es decir

- ComboBox 1 = Regiones
- ComboBox 2 = Ciudad
- ComboBox 3 = Comunas

el combo 3 debería mostrar sólo las Comunas de la  Ciudad seleccionada
el combo 2 debería mostrar sólo las Ciudades de la Región seleccionada

alguien tiene algún ejemplo de cómo hacerlo? tengo VFP 9.0

gracias.

Jorge Kiernan

unread,
Oct 6, 2020, 4:39:31 PM10/6/20
to publicesvfoxpro
Deberias usar los eventos Lostfocus de cada combo.
en el combo 1 en el evento lostfocus, aplicas un filtro sobre los datos del 2do combo algo asi como 
sele ciudades
if !empty(this.value)
    set filter ciudades.region =  .ComboBox 1.value  
else
   set filter to 
endif 
.ComboBox 2.requery
Esto tiene un monton de matices, depende de que tengas como ROWSOURCE de esos combos.
Tambien que al recibir el foco el 2do combo, entienda a que te referis con .COMBOBOX1  que puede perderlo de referencia.
En ese caso una posibilidad es escribir la referencia completa del combobox, ya sea THISFORM,COMPROBOX1  o lo que corresponda.
 


--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/4568f9ea-9478-4d17-a1f0-0a95c4381388o%40googlegroups.com.

Carlos Muñoz G.

unread,
Oct 6, 2020, 5:00:50 PM10/6/20
to Comunidad de Visual Foxpro en Español
me da error de compilación en esta linea
    set filter abr_comuna.circun =  .ComboBox BOXprovincia.value  


Carlos Muñoz G.

unread,
Oct 6, 2020, 5:17:04 PM10/6/20
to Comunidad de Visual Foxpro en Español
lo solucione así:

select abr_comuna
if !empty(this.value)
    set filter TO abr_comuna.circun =  m.provincia
else
   set filter to 
endif 

en LOSTFOCUS

MUCHAS GRACIAS, FUISTE DE GRAN AYUDA.

Oscar Bonet

unread,
Oct 6, 2020, 7:30:38 PM10/6/20
to publice...@googlegroups.com
deberias hacer un solo combo de tres columnas y asi capturar el dato sin errores.

Oscar Bonet
   



De conformidad con el decreto 2242 de Noviembre de 2015, nuestra Compañía está implementando la Facturación Electrónica y según comunicado  100202211-410 del 29 de Junio de 2018 emitido por la DIAN, se nos fijó el 1 de diciembre de 2018 para la emisión de la factura electrónica.
En consecuencia, hemos destinado la cuenta de correo electrónico: 
e-fac...@cialta.com      para recepción y emisión de facturas electrónicas.

Habeas Data: La Compañía Internacional de Alimentos Agropecuarios CIALTA S.A.S. cumple con los requerimientos de la Superintendencia de Industria y Comercio de Colombia sobre el manejo de información de datos personales, lo cual implica tener políticas claras de tratamiento de Base de Datos que usted puede consultar: Politicas Habeas Data 

Si desea tener más información sobre el particular, puede escribirnos al correo habea...@cialta.com 

Ricardo Soldini

unread,
Oct 6, 2020, 8:44:22 PM10/6/20
to Comunidad de Visual Foxpro en Español
Hola Yo lo hago asi 
agrego metodos al form para cargar cada tabal en cursores  y agrego propiedades para idComuna, IdRegion, IdCiudad

en el Init del form pongo la llamada al primer metodo que carga el primer cursor
&&metodo carga_region
select region, id_region from regiones into cursor mis_regiones
select mis_regiones 
go top
thisform.id_region=mis_regiones.id_region
thisform.carga_ciudades && invoco al metodo para cargar ciudad
&& metodo carga ciudades
select ciudad, id_ciudad fro ciudades ;
where id_reegion = thisform.id_region ;
into cursor mis_ciudades
Select mis_ciudades
go top
thisformid_ciudad=mis_ciudades.id_ciudad
thisform.carga_comunas  &&invoco al metodo para cargar comuna
&& metodo carga comunas
Select comuna, id_comuna from comunas ;
where id_ciudad = thisform.id_ciudad
into cursor mis_ciudades

Ahora bien estos cursores los asigno a Combos asociados 
en el int de cada combo 
pongo  por ej para regiones 
SELECT mis_regiones 
ord=1
SCAN
WITH this 
   .AddListItem ( mis_regiones  .region,ord,1)
   .AddListItem(ALLTRIM(STR( mis_regiones  .id_region,2)),ord,2)
   .BoundColumn = 1
   .ColumnCount=2
   .ListIndex=1
   .ColumnWidths=("200,45,")
ENDWITH
ord=ord+1
ENDSCAN 

en el valid del combo 
thisform.ID_region=VAL(THISFORM.COMbo1.ListItem(THISFORM.COMbo1.ListItemId ,2))  &&suponiendo que el combo es combo1 sino lo cambias 
thisform.carga_ciudad &&llamo al metodo que selecciona las ciudades de la region elegida

en el init del combo donde selecciono ciudad repito lo mismo pero asignando a la propiedad thisform.idciudad

Esto suponiendo que usas tablas dbf

si lo haces con una BD externa (sql/mySql/etc) solo cambia la carga de cursores por el select sql que corresponda
yo estoy usando FoxyDb que anda re bien y los select los cargo asi
odb.Sql("Select Comuna, idComuna,IdCiudad from TabComunas","TabComunas")
SELECT TabComunas
GO top
ord=1
SCAN
WITH thisform.pageframe1.page1.combo1 
   .AddListItem (TabComunas.Comuna,ord,1)
   .AddListItem(ALLTRIM(STR(TabComunas.idComuna,2)),ord,2)
   .BoundColumn = 1
   .ColumnCount=2
   .ListIndex=1
   .ColumnWidths=("200,45")
ENDWITH
ord=ord+1
ENDSCAN
 enl valid del combo
thisform.idcomuna = VAL(THISFORM.COMbo1.ListItem(THISFORM.COMbo1.ListItemId ,2))


Reply all
Reply to author
Forward
0 new messages