Tengo una necesidad urgente de poder implementar un requerimiento, sobre el uso de Combobox.
Maestro Antonio, me presento un código para manejar 2 combobox, el cual amablemente Francisco Alegría adapto a mi necesidad y quedo funcionando muy bien.
Este se trata que al seleccionar una Ciudad en su Array, filtra y muestra en el array de comunas, solo las que pertenecen, pero ahora debo agregar un 3er array, que contiene los sectores de cada comuna y que debe ser filtrado según la comuna seleccionada, final mente obtendría para una ciudad, todas las comunas y para cada comuna todos sus sectores.
Muy agradecido de Francisco por haber modificado este codigo.
Espero haber expuesto bien mi requerimiento.
Muchos saludos.
Antonio
Código Funcional para 2 Combobox anidados:
- Code: Select all Expand view
function Prue_Combo()
local oDlg, cCiudad, cComuna, oComuna
local aCiudades, aComunas, aArr
aArr := CrearArrays2()
aCiudades := aArr[1]
aComunas := aArr[2]
cCiudad := aCiudades[1]
cComuna := aComunas[1,1]
DEFINE DIALOG oDlg FROM 1,1 TO 300, 600 PIXEL TITLE "Seleccione Ciudad y Comuna"
@ 20, 10 COMBOBOX cCiudad ITEMS aCiudades SIZE 130,200 PIXEL OF oDlg ;
ON CHANGE ( oComuna:SetItems( aComunas[ AScan( aCiudades, cCiudad ) ] ), oComuna:Set( oComuna:aItems[ 1 ] ) )
@ 20,160 COMBOBOX oComuna VAR cComuna ITEMS aComunas[ 1 ] SIZE 130,200 PIXEL OF oDlg
@ 100,(300/2)-(100/2) BUTTON "Mostrar seleccionado" SIZE 100, 20 PIXEL OF oDlg ;
ACTION MsgInfo( cCiudad, cComuna )
ACTIVATE DIALOG oDlg CENTERED
return nil
Function CrearArrays2()
local aArray1 := {}, aArray2 := {}, aItems := {}, nVar, n
local aCiudades:={ { 1,'ARICA'},;
{ 2,'PARINACOTA'},;
{ 3,'IQUIQUE'},;
{ 4,'TAMARUGAL'},;
{ 5,'ANTOFAGASTA'},;
{ 49,'SANTIAGO'},;
{ 54,'TALAGANTE'} }
local aComunas:= { { 1,'ARICA'},;
{ 1,'CAMARONES'},;
{ 2,'PUTRE'},;
{ 2,'GENERAL LAGOS'},;
{ 3,'IQUIQUE'},;
{ 3,'ALTO HOSPICIO'},;
{ 4,'POZO ALMONTE'},;
{ 4,'CAMIÑA'},;
{ 4,'COLCHANE'},;
{ 4,'HUARA'},;
{ 4,'PICA'},;
{ 5,'ANTOFAGASTA'},;
{ 5,'MEJILLONES'},;
{ 5,'SIERRA GORDA'},;
{ 5,'TALTAL'} }
local aSector= { { 1,1,'CERRO'},;
{ 1,2,'COSTA'},;
{ 2,1,'CENTRO'},;
{ 2,2,'COSTA SUR'},;
{ 3,1,'VALLE'},;
{ 3,2,'ALTO PIREN'},;
{ 4,1,'ALTO BLANCO'},;
{ 4,2,'VALLE VERDE'},;
{ 4,3,'RIO MAIPO'},;
{ 4,4,'ALTO JAHUEL'},;
{ 4,5,'SAN JORGE'},;
{ 5,1,'SAN LEON'},;
{ 5,2,'CERRILLOS'},;
{ 5,3,'SAN ADOLFO'},;
{ 5,4,'EL MONTE'} }
For n := 1 To Len(aCiudades)
aadd(aArray1, aCiudades[n,2])
nVar := aCiudades[n,1]
aItems := {}
AEval( aComunas, {|a| if(a[1] == nVar, aadd(aItems, a[2]),) } )
if( len(aItems) = 0, aadd(aItems,"Sin Valor"), nil )
aadd(aArray2, aItems)
Next
SysRefresh()
Return { aArray1, aArray2 }