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:
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 }