Ombrage des blocs de lignes dans une zone de table<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
J'ai une Table Box qui contient un grand nombre de lignes qui se regroupent naturellement en blocs de trois lignes chacun (car les lignes 1 à 3 concernent un composé chimique, les lignes 4 à 6 se rapportent à un autre, les lignes 7 à 9 se rapportent à un troisième). , et ainsi de suite).Je voudrais ombrer les lignes pour rendre les blocs de composés visuellement plus faciles à distinguer - je veux donc ombrer les lignes 1 à 3, puis laisser les lignes 4 à 6 en blanc, puis ombrer les lignes 7 à 9, puis laisser les lignes 10 à 12. blanc, etc. (L'exigence d'ombrage de trois lignes à la fois signifie que je ne peux pas simplement utiliser la propriété "<< ombrer les lignes alternatives".)
Je peux présélectionner chaque bloc alternatif de trois lignes avec la propriété "<< set selected rows()", mais ce motif de coloration serait alors perdu si l'utilisateur cliquait ensuite sur l'une des lignes ou les sélectionnait/désélectionnait. .J'ai donc appliqué la même propriété dans la propriété "<< set row change function" - donc si l'utilisateur clique n'importe où sur la table, l'ombrage est immédiatement réappliqué.Je me retrouve avec quelque chose comme ceci :
liste de noms = répéter({"A"}, 3) || répéter({"B"}, 3) || répéter({"C"}, 3) || répéter({"D"}, 3) || répéter({"E"}, 3) || répéter({"F"}, 3) || répéter({"G"}, 3) || répéter({"H"}, 3);
troisListe = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21} ;
tb = Boîte de table (
Chaîne Col Box("Nom", liste de noms),
Numéro Col Box("Premier", index(1, 24)),
Numéro Col Box("Deuxième", index(25, 48)),
Numéro Col Box("Troisième", index(49, 72)),
<< définir la couleur de la ligne sélectionnée ("cyan"),
<< définir les lignes sélectionnées (troisListe),
<< définir la fonction de changement de ligne (tb << définir les lignes sélectionnées (trois listes)),
<< définir le défilement (1),
<< définir les bordures des colonnes (1),
<< définir les titres soulignés(1)
);
new window("Ma fenêtre", tb);
Cela fonctionne, mais semble un peu compliqué.Quelqu'un peut-il suggérer un moyen plus simple de procéder ?
Merci beaucoup.
Re : Ombrage de blocs de lignes dans une zone de tableJuste pour répondre à certaines de vos préoccupations concernant l'utilisation d'une nouvelle vue de données :
Tout ce que vous devez faire pour répondre aux actions des utilisateurs est d'ajouter un gestionnaire d'état de ligne.Il détectera les modifications et accédera à une fonction dans laquelle vous pourrez résoudre le problème par programme.Comme dans ce cas, si la vue était triée, vous pouvez réinitialiser les couleurs des cellules dans le nouvel ordre.
F = fonction ({ un } ,< réinitialiser les couleurs des cellules > ) ;
rs = dt << créer un gestionnaire d'état de ligne ( F ) ;
Re : Ombrage de blocs de lignes dans une zone de tableMerci à tous - cela a été extrêmement utile dans tous les domaines, et je vais cocher le problème comme ayant été résolu, car j'en ai maintenant suffisamment pour résoudre ma requête initiale.
J'ai essayé la suggestion de Vince de définir la propriété "<< set selectable rows(0)" après avoir créé la zone de table avec la sélection requise, malheureusement, il semble cependant que cela efface la sélection avant de prendre effet.
J'ai pris une copie du script de Jim, car j'ai invariablement des difficultés avec la syntaxe des combinaisons de constructions eval(),substitut() et expr(), et avoir des exemples fonctionnels à adapter rend la vie beaucoup plus facile !En fait, je vais rester avec ma Table Box au moins pour le moment, car la structure du rapport que je crée est mieux adaptée à ce format de sortie - mais la route New Data Box est quelque chose que je n'avais pas envisagé auparavant. , et pourrait bien être utile dans le futur.
Il m'a également été signalé dans une communication privée que je devrais peut-être considérer l'impact sur ma propre solution d'un utilisateur essayant ensuite de trier la Table Box par l'une de ses colonnes (ce qu'il pourrait facilement faire avec un clic droit) .En fait, cela ne poserait pas de problème dans ce cas, car la zone de tableau fait partie d'un rapport final dans lequel un tri plus approfondi ne servirait à rien, mais le point est bien compris.
Enfin, j'ai noté au passage que la propriété "<< set row change function()" ne sera pas réellement travail à moins qu'une ou plusieurs lignes n'aient été explicitement sélectionnées par la propriété "<< set selected rows()" ou qu'une propriété "<< set selectable rows(1)" ait été incluse dans la liste des paramètres de propriété.C'est juste une petite chose, mais cela m'a dérouté jusqu'à ce que je réalise qu'au moins une de ces choses était nécessaire avant de pouvoir faire ce que j'essayais de faire.
Encore une fois, merci beaucoup à tous.
Re : Ombrage de blocs de lignes dans une zone de tableLa façon dont je gère cela est d'utiliser une fonction New Data Box() et de ne pas utiliser de Table Box(), mais plutôt une table de données.Avec cela, vous pouvez colorer les cellules, etc. et profiter pleinement de toutes les capacités d'édition d'un tableau de données.
Voici un script pour illustrer ce dont je parle :
Noms par défaut ici ( 1 ) ;
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" , invisible ) ;
// Sélection de groupes de 3 lignes
Pour ( k = 1 , k <= 3 , k ++,
Pour ( je = k , je <= N lignes ( dt ) , je = je + 6 ,
État de la ligne ( je ) = État sélectionné ( 1 )
)
) ;
la liste = Comme liste ( dt << obtenir les lignes sélectionnées ) ;
dt << Effacer la sélection ;
// Boucle sur toutes les colonnes et définit les couleurs des cellules
Colliste = dt << obtenir les noms de colonnes ( "chaîne" ) ;
Pour ( je = 1 , je <= N articles ( Colliste ) , je ++,
Évaluer (
Remplaçant (
Expr (
Colonne ( dt , Colliste [ je ] ) << cellules de couleur ( { "Rouge" , _la liste_ } )
) ,
Expr ( _la liste_ ) , la liste
)
)
) ;
// Configurer la fenêtre d'affichage
Nouveau = Nouvelle fenetre ( "Afficher" ,
Zone de liste V (
tuberculose = Zone de texte ( " L'exemple" ) ,
vlb = Zone de liste V ()
)
) ;
sdb = dt << Nouvelle boîte de données () ;
vlb << ajouter ( sdb ) ;
sdb << fermer les panneaux latéraux ( 1 ) ;
tuberculose << définir la taille de la police ( 20 ) ;
Il produit la fenêtre d'affichage suivante

Re : Ombrage de blocs de lignes dans une zone de tableJe pourrais faire quelque chose comme ça.
indice = 1 :: 99 ;
nouvelle fenetre ( "Fenêtre" , à to = TableBox ( NuméroColBox ( "Colonne" , indice)));
m= 3 ; //Vous pouvez changer cela en n'importe quel numéro de votre groupe
lignes = lieu ( module ( sol ((indice- 1 )/n), 2 ) ); // donne juste des groupes alternés de n rafales ensemble
tuberculose << Définir les lignes sélectionnées (Lignes);
J'espère que cela t'aides.Acclamations.
*Modifier* Je viens de réaliser que ce n'est pas la partie sur laquelle vous posiez probablement la question.Désolé.
Pourriez-vous simplement sélectionner les lignes, puis les rendre non sélectionnables ?
tb << Définir les lignes sélectionnables (0);