Ombrage de blocs de lignes dans une zone table<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
J'ai une Table Box qui contient un grand nombre de rangées qui se regroupent naturellement en blocs de trois rangées chacun (car les rangées 1 à 3 concernent un composé chimique, les rangées 4 à 6 se rapportent à un autre, les rangées 7 à 9 se rapportent à un troisième , etc).Je voudrais ombrer les rangées pour rendre les blocs de composés plus faciles à distinguer visuellement - donc je veux ombrer les rangées 1 à 3, puis laisser les rangées 4 à 6 blanches, puis ombrer les rangées 7 à 9, puis laisser les rangées 10 à 12 blanc etc. (L'exigence d'ombrage de trois lignes à la fois signifie que je ne peux pas simplement utiliser la propriété "<< ombrager les lignes alternées".)
Je peux présélectionner chaque bloc alternatif de trois lignes avec la propriété "<< définir les lignes sélectionnées()", mais ce motif de coloration serait alors perdu si l'utilisateur devait ensuite cliquer sur l'une des lignes ou les sélectionner/désélectionner autrement .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 ça :
nameList = 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 = Table Box(
Chaîne Col Boîte("Nom", liste_noms),
Nombre Col Boîte("Premier", index(1, 24)),
Nombre Col Box("Deuxième", index(25, 48)),
Nombre 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 (threeList),
<< définir la fonction de changement de ligne (tb << définir les lignes sélectionnées (threeList)),
<< set scrollable(1),
<< définir les bordures de colonne(1),
<< définir les titres soulignés(1)
);
nouvelle fenêtre("Ma fenêtre", tb);
Cela fonctionne, mais semble un peu compliqué.Quelqu'un peut-il suggérer un moyen plus simple de le faire?
Merci beaucoup.
Re : Ombrage de blocs de lignes dans une boîte 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 traiter les actions des utilisateurs est d'ajouter un gestionnaire d'état de ligne.Il détectera les modifications et passera à une fonction dans laquelle vous pourrez résoudre le problème par programmation.Comme dans ce cas, si la vue a été triée, vous pouvez réinitialiser les couleurs des cellules au 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 boîte de tableMerci à tous - cela a été extrêmement utile tout au long, et je vais cocher le problème comme ayant été résolu, car j'en ai maintenant assez 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 tableau avec la sélection requise, malheureusement, il semble 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 de travail à adapter rend la vie beaucoup plus facile !Je vais en fait rester avec ma boîte de table 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 de la nouvelle boîte de données est quelque chose que je n'avais pas envisagé auparavant , et pourrait bien être utile à l'avenir.
Il m'a également été signalé dans une communication privée que je pourrais avoir besoin de tenir compte de l'impact sur ma propre solution d'un utilisateur essayant par la suite de trier la Table Box par l'une de ses colonnes (ce qu'il pourrait facilement faire avec un clic droit) .En fait, ce ne serait pas un problème dans ce cas, car la boîte de tableau fait partie d'un rapport final dans lequel le trier davantage 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 travailler à moins qu'une ou plusieurs lignes 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 troublé jusqu'à ce que je réalise qu'au moins l'un d'entre eux était nécessaire avant de pouvoir faire ce que j'essayais de faire.
Encore un grand merci à tous.
Re : Ombrage de blocs de lignes dans une boîte de tableLa façon dont je gère cela est d'utiliser une fonction New Data Box() et de ne pas utiliser une 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 = Ouvert ( "$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 Sélectionner ;
// Boucle sur toutes les colonnes et définit les couleurs des cellules
colliste = dt << obtenir les noms de colonnes ( "chaîne de caractères" ) ;
Pour ( je = 1 , je <= N articles ( colliste ) , je ++,
Éval (
Remplaçant (
Expr (
Colonne ( dt , colliste [ je ] ) << cellules de couleur ( { "Rouge" , _la liste_ } )
) ,
Expr ( _la liste_ ) , la liste
)
)
) ;
// Configuration de la fenêtre d'affichage
NO = Nouvelle fenetre ( "Affichage" ,
Zone de liste V (
tuberculose = Zone de texte ( " L'exemple" ) ,
vlb = Zone de liste V ()
)
) ;
ndb = dt << Nouvelle boîte de données () ;
vlb << ajouter ( ndb ) ;
ndb << 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 boîte de tablePourrait faire quelque chose comme ça.
indice = 1 :: 99 ;
nouvelle fenetre ( "Fenêtre" , tb = TableBox ( NombreColBox ( "Colonne" , indice)));
n= 3 ; // Vous pouvez changer cela en n'importe quel numéro de votre groupe
lignes = lieu ( mode ( sol ((indice- 1 )/n), 2 ) ); // donne juste des groupes alternés de n rafales ensemble
TB << 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 des questions.Pardon.
Pourriez-vous simplement sélectionner les lignes, puis les rendre non sélectionnables ?
tb << Définir les lignes sélectionnables (0);