Voici une fonction 'hierListBox ()':
// ************************************************ ******************************************
// ian.cox@jmp.com : 04sep2007
//
// Crée un ListBox "hiérarchique", où le contenu affiché pour la deuxième liste est
// conditionnel à la sélection actuelle dans la première liste. Sélections multiples dans les deux listes
// sont autorisés.
// ************************************************ ******************************************
Effacer les globes () ;
hierListBox = Une fonction ( { dt , c1 , c2 , winTitle } ,
// Faire le mappage requis: m mappe chaque valeur unique de c1 à toutes les valeurs correspondantes
// valeurs en c2
m = [ => ] ;
Pour chaque rangée (
k = c1 [ Rangée ()] ;
Si ( ! ( m << Contient ( k )) ,
m [ k ] = {}
) ;
m [ k ] = Insérer ( m [ k ] , c2 [ Rangée ()] ) ;
) ;
// Construire l'interface utilisateur initiale
l1 = c1 << GetValues ;
l2 = c2 << GetValues ;
lb1 = Zone de liste ( l1 , lb1Script ( lb1 ) ) ;
lb2 = Zone de liste ( l2 ) ;
maintenant = Nouvelle fenetre ( winTitle ,
lb1 ,
lb2 ,
Zone de liste H ( Boîte à boutons ( "D'ACCORD" , OKScript ) , Boîte à boutons ( "Annuler" , maintenant << Fermer la fenêtre ) )
) ;
// Script qui s'exécute lorsque la sélection dans lb1 est faite ou modifiée (met à jour le contenu de lb2)
lb1Script = Expr (
slb1 = lb1 << GetSélectionné ;
l2new = {} ;
Pour ( je = 1 , je <= N articles ( slb1 ) , je ++,
Insérer dans ( l2new , m [ slb1 [ je ]] )
) ;
lb2 << Effacer ;
lb2 = Zone de liste ( l2new ) ;
maintenant [ ListBoxBox ( 1 )] << SibAppend ( lb2 ) ;
) ;
// Quand la sélection de l'utilisateur est faite. . .
OKScript = Expr (
maintenant << Fermer la fenêtre ;
l1 = lb1 << GetSélectionné ;
l2 = lb2 << GetSélectionné ;
// Faites une liste des sélections à partir des deux listes
l = Liste d'évaluation ( { l1 , l2 } ) ;
) ;
) ;
// Table . . .
dt = Nouvelle table ( "Tester" ,
Ajouter des lignes ( 20 ) ,
Nouvelle colonne ( "Etat" ,
Personnage ,
Nominal ,
Définir des valeurs (
{ "FL" , "FL" , "CAROLINE DU NORD" , "MI" , "AZ" , "MI" , "CAROLINE DU NORD" , "MI" , "AZ" , "FL" , "FL" , "CAROLINE DU NORD" , "FL" , "CAROLINE DU NORD" , "MI" , "FL" , "FL" ,
"MI" , "CAROLINE DU NORD" , "CAROLINE DU NORD" }
)
) ,
Nouvelle colonne ( "Ville" ,
Personnage ,
Nominal ,
Définir des valeurs (
{ "Ville 1" , "Ville 2" , "Ville 3" , "Ville 4" , "Ville 5" , "Ville 6" , "Ville 7" , "Ville 8" , "Ville 9" , "Ville 10" ,
"Ville 11" , "Ville 12" , "Ville 13" , "Ville 14" , "Ville 15" , "Ville 16" , "Ville 17" , "Ville 18" , "Ville 19" ,
"Ville 20" }
)
)
) ;
// colonnes. . .
c1 = Colonne ( dt , "Etat" ) ;
c2 = Colonne ( dt , "Ville" ) ;
// Créer une carte. . .
l = hierListBox ( dt , Colonne ( "Etat" ) , Colonne ( "Ville" ) , "Conditionnel" ) ;
Spectacle ( l ) ;
Voici un exemple qui pourrait vous aider:

dt = Ouvrir ( "$ SAMPLE_DATA / Cars 1993.jmp" ) ;
Résumer ( Faire = Par ( "Fabricant" )) ;
Insérer dans ( Faire , "Sélectionner..." , 1 ) ;
maintenant = Nouvelle fenetre ( "Sélectionner le type de voiture" ,
Boîte frontière ( Haut ( dix ) , La gauche ( 20 ) , Droite ( 20 ) ,
Boîte de lineup ( NCol ( 1 ) ,
cb = Boîte combo ( Faire , << Scénario ( faire la sélection () ) ) ,
kg = Zone de liste ( {} , Largeur ( 100 ) , NLines ( 6 ) ) ,
Boîte frontière ( La gauche ( 120 ) , Haut ( 4 ) , Bas ( 4 ) , Droite ( 4 ) ,
Boîte à boutons ( "D'ACCORD" , doOk () )
)
)
)
) ;
faire la sélection = Une fonction ({} ,
faire = cb << Être sélectionné ;
rangées = dt << Obtenir des rangées où ( AsColumn ( "Fabricant" ) == faire ) ;
lstModèle = Colonne ( "Modèle" ) [ rangées ] ;
kg << Enlever tout ;
kg << Ajouter ( lstModèle ) ;
dt << Effacer la sélection ;
) ;
doOk = Une fonction ( {} ,
cbSel = cb << Être sélectionné ;
lbSel = kg << Être sélectionné ;
maintenant << Fermer la fenêtre ;
Spectacle ( cbSel , lbSel ) ;
) ;