Comment remplir une zone de liste déroulante avec des valeurs distinctes ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut
Quelle est la meilleure façon de remplir une zone de liste déroulante avec les valeurs distinctes d'une colonne ?? Je veux pouvoir indiquer à l'utilisateur quelles données (dans ce cas, le numéro de pièce) il souhaite analyser, puis, en fonction de sa sélection, le code créerait un nouveau tableau de sous-ensemble de la valeur sélectionnée uniquement.
J'imagine que le code ressemblerait à ceci :
valeurs = : nom de la colonneici << Obtenez des valeurs distinctes ;
Nouvelle fenetre ( "Exemple" ,
CB = Boîte combo ( valeurs ) ,
Boîte à boutons ( "D'ACCORD" )
) ;
Un peu de code ici pour créer une table de sous-ensemble...
Est-ce que quelqu'un sait quelle serait la meilleure pratique pour procéder ainsi ??
Merci
Comment remplir une zone de liste déroulante avec des valeurs distinctes ?Je n'ai jamais essayé la fonction sur une colonne numérique.Des résultats intéressants.
J'ai fait quelques tests de performances de tableaux associatifs par rapport à un résumé pour déterminer des valeurs uniques, et c'était assez uniforme.A titre d'exemple, j'ai utilisé un tableau de 180 000 lignes.Les deux méthodes ont pris 4 secondes pour déterminer les valeurs uniques de 6 colonnes.
Re : Comment remplir une combo avec des valeurs distinctes ?Fonctionnalité sympa ! Si la colonne est numérique, alors Summarize() est ici en fait préférable à la méthode Associative Array(). Summarize met des guillemets doubles autour des niveaux numériques tandis que les éléments de la liste générée par les clés AA<
Pour d'autres utilisations lorsque le nombre plutôt que Char(number) est requis, l'approche AA peut être un meilleur choix. La méthode AA est également générale car elle ne se limite pas aux colonnes et accepte de nombreux types de données comme éléments de liste (matrices, expressions...).
Re : Comment remplir une combo avec des valeurs distinctes ?Il semble que les zones de liste déroulante soient gâchées par des entrées vides.Si vous utilisez une zone de liste à la place, cela fonctionne, même si l'une des entrées est vide, ce que vous ne voulez pas.
Voici la fonction que j'utilise pour obtenir des valeurs uniques à partir d'une colonne, qui utilise le Résumer commande:
//------------------------------------------------ --------------------------------
/* Nom de la fonction Obtenir des valeurs uniques
Description : Obtenez les valeurs uniques d’une colonne.Par exemple:
Les indications
------------
AAAAA
BBBBB
AAAAA
CCCCC
CCCCC
unique_list = obtenir des valeurs uniques (:Indications)
renverra {"AAAAA", "BBBBB", "CCCCC"}
Arguments:
Descripteur de colonne dtcol pour calculer des valeurs uniques pour
*/
Obtenez des valeurs uniques = Fonction ( { dtcol } , { local par défaut } ,
// Astuce Eval/expr pour que cela fonctionne.
évaluer ( expression d'évaluation (
Résumer ( liste_unique = Par ( expression ( dtcol ))))) ;
liste_unique ;
) ; // fin obtient des valeurs uniques
Voici un exemple qui montre comment utiliser la fonction.J'ai lu au préalable le tableau des données physiques de la voiture et j'ai effacé certaines entrées dans la colonne Pays.
dt = Ouvrir ( "$sample_data\Données physiques du véhicule.jmp" ) ;
liste_pays = obtenir des valeurs uniques ( Colonne ( dt , "Pays" ) ) ;
pour ( je = articles ( liste_pays ) , je > 0 , je --,
imprimer ( je ) ;
si ( liste_pays [ je ] == "" ,
retirer ( liste_pays , je ) ;
)
) ;
nw1 = Nouvelle fenetre ( "Exemple" ,
CB = Boîte combo ( liste_pays ) ,
Boîte à boutons ( "D'ACCORD" , nw1 << Fermer la fenêtre )
) ;
nw2 = Nouvelle fenetre ( "Exemple" ,
kg = Zone de liste ( liste_pays ) ,
Boîte à boutons ( "D'ACCORD" , nw2 << Fermer la fenêtre )
) ;
Je suppose que la meilleure chose à faire est d'ajouter la suppression du blanc à la fonction.
Comment remplir une zone de liste déroulante avec des valeurs distinctes ?Je l'ai fait fonctionner en utilisant une boucle For qui ignore toutes les cellules vides. Voici le code pour tous ceux qui sont curieux :
partieArray = Tableau associatif () ;
Pour ( je = 1 , je <= N lignes ( dt ) , je ++,
Si ( Partie [ je ] != "" ,
partieArray << Insérer ( Partie [ je ] )
)
) ;
partieArray = partieArray << obtenir les clés ;
Comment remplir une zone de liste déroulante avec des valeurs distinctes ?J'ai découvert que cela se produit lorsqu'il y a une cellule vide dans la colonne. Si les cellules vides sont supprimées, cela fonctionne bien. Une idée de pourquoi cela ne fonctionnera pas avec les cellules vides ??
Comment remplir une zone de liste déroulante avec des valeurs distinctes ?Merci. C'est exactement ce que je voulais.
Cependant, cela ne fonctionne pas pour ma table. Si j'utilise votre code avec l'exemple de table "Big Class", cela fonctionne bien. Cependant, si je remplace le tableau par celui contenant mes données, la zone de liste déroulante est vide. Des idées pourquoi ?? La modification des colonnes entraîne une modification de la largeur de la zone de liste déroulante, mais elle reste vide. J'ai vérifié les propriétés des colonnes et elles sont les mêmes que celles de Bog Class.
Des idées?
Merci encore
Comment remplir une zone de liste déroulante avec des valeurs distinctes ?UN entrée récente du blog JMP présenté différentes manières d'obtenir une liste de valeurs uniques. Une approche que j'ai apprise de là utilise des tableaux associatifs.
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
partenaire = Tableau associatif ( ( : sexe << obtenir des valeurs ) ) << obtenir les clés ;
Nouvelle fenetre ( "Exemple" , CB = Boîte combo ( ( partenaire ) ) , Boîte à boutons ( "D'ACCORD" ) ) ;