Schattieren von Zeilenblöcken in einer Tabellenbox<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hi,
Ich habe eine Tabellenbox, die eine große Anzahl von Zeilen enthält, die sich auf natürliche Weise in Blöcke mit jeweils drei Zeilen gruppieren (weil sich die Zeilen 1 bis 3 auf eine chemische Verbindung beziehen, die Zeilen 4 bis 6 auf eine andere, die Zeilen 7 bis 9 auf eine dritte , usw).Ich möchte die Zeilen schattieren, damit die zusammengesetzten Blöcke visuell leichter zu unterscheiden sind - also möchte ich die Zeilen 1 bis 3 schattieren, dann die Zeilen 4 bis 6 weiß lassen, dann die Zeilen 7 bis 9 schattieren und dann die Zeilen 10 bis 12 belassen weiß usw. (Die Anforderung, drei Zeilen gleichzeitig zu schattieren, bedeutet, dass ich nicht einfach die Eigenschaft "<< abwechselnde Zeilen schattieren" verwenden kann.)
Ich kann jeden abwechselnden Block von drei Zeilen mit der Eigenschaft "<< set selected rows()" vorab auswählen, aber dieses Farbmuster würde dann verloren gehen, wenn der Benutzer anschließend auf eine der Zeilen klicken oder sie anderweitig auswählen/abwählen würde .Ich habe daher dieselbe Eigenschaft innerhalb der Eigenschaft „<< set row change function“ angewendet – wenn der Benutzer also irgendwo in die Tabelle klickt, wird die Schattierung sofort wieder angewendet.Ich ende mit so etwas:
nameList = repeat({"A"}, 3) || repeat({"B"}, 3) || repeat({"C"}, 3) || wiederhole({"D"}, 3) || repeat({"E"}, 3) || repeat({"F"}, 3) || repeat({"G"}, 3) || repeat({"H"}, 3);
DreiListe = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21};
tb = Tabellenbox (
String Col Box("Name", Namensliste),
Number Col Box("First", index(1, 24)),
Nummer Col Box("Second", index(25, 48)),
Nummer Col Box("Third", index(49, 72)),
<< setze ausgewählte Zeilenfarbe ("cyan"),
<< ausgewählte Zeilen setzen (dreiListe),
<< setze Zeilenwechselfunktion(tb << setze ausgewählte Zeilen(threeList)),
<< setze scrollbar(1),
<< Spaltengrenzen setzen(1),
<< Überschriften unterstreichen(1)
);
neues Fenster ("Mein Fenster", tb);
Das funktioniert, wirkt aber etwas umständlich.Kann jemand einen einfacheren Weg vorschlagen?
Danke vielmals.
Betreff: Zeilenblöcke in einer Tabellenbox schattierenNur um einige Ihrer Bedenken bezüglich der Verwendung einer neuen Datenansicht auszuräumen:
Alles, was Sie tun müssen, um die Benutzeraktionen zu adressieren, ist, einen Row State Handler hinzuzufügen.Es erkennt die Änderungen und verzweigt zu einer Funktion, in der Sie das Problem programmgesteuert beheben können.In diesem Fall könnten Sie beispielsweise bei einer sortierten Ansicht die Zellenfarben auf die neue Reihenfolge zurücksetzen
f = Funktion ({ a } ,< Zellenfarben zurücksetzen > ) ;
rs = dt << Rowstate-Handler erstellen ( f ) ;
Betreff: Zeilenblöcke in einer Tabellenbox schattierenVielen Dank an alle - das war rundum äußerst hilfreich, und ich werde das Problem als gelöst markieren, da ich jetzt genug habe, um meine ursprüngliche Anfrage zu lösen.
Ich habe Vinces Vorschlag ausprobiert, die Eigenschaft "<< auswählbare Zeilen festlegen (0)" festzulegen, nachdem die Tabellenbox mit der erforderlichen Auswahl erstellt wurde. Unglücklicherweise scheint dies jedoch die Auswahl tatsächlich zu löschen, bevor sie wirksam wird.
Ich habe eine Kopie von Jims Skript genommen, da ich ausnahmslos Schwierigkeiten mit der Syntax von Kombinationen aus eval()-, replace()- und expr()-Konstruktionen habe, und funktionierende Beispiele zum Anpassen zu haben, macht das Leben viel einfacher!Eigentlich werde ich zumindest vorerst bei meiner Table Box bleiben, da die Struktur des Berichts, den ich erstelle, besser für dieses Ausgabeformat geeignet ist – aber die New Data Box-Route ist etwas, das ich vorher nicht in Betracht gezogen hatte , und könnte in Zukunft sehr nützlich sein.
In einer privaten Mitteilung wurde ich auch darauf hingewiesen, dass ich möglicherweise die Auswirkungen auf meine eigene Lösung berücksichtigen muss, wenn ein Benutzer anschließend versucht, die Tabellenbox nach einer ihrer Spalten zu sortieren (was er leicht mit einem Rechtsklick tun könnte). .Eigentlich wäre dies in diesem Fall kein Problem, da die Tabellenbox Teil eines Abschlussberichts ist, in dem eine weitere Sortierung keinen sinnvollen Zweck hätte, aber der Punkt ist gut getroffen.
Schließlich habe ich nebenbei bemerkt, dass die Eigenschaft "<< set row change function()" dies nicht tut Arbeit es sei denn, eine oder mehrere Zeilen wurden explizit durch die Eigenschaft "<< set selected rows()" ausgewählt oder eine Eigenschaft "<< set selected rows(1)" wurde in die Liste der Eigenschaftseinstellungen aufgenommen.Es ist nur eine Kleinigkeit, aber es verwirrte mich, bis mir klar wurde, dass mindestens eines davon notwendig war, bevor ich tun konnte, was ich versuchte zu tun.
Nochmals vielen Dank an alle.
Betreff: Zeilenblöcke in einer Tabellenbox schattierenDie Art und Weise, wie ich damit umgehe, besteht darin, eine New Data Box()-Funktion zu verwenden und keine Table Box(), sondern eine Datentabelle zu verwenden.Damit können Sie die Zellen usw. einfärben und alle Bearbeitungsmöglichkeiten einer Datentabelle voll ausschöpfen.
Hier ist ein Skript, um zu veranschaulichen, wovon ich spreche:
Namen standardmäßig hierher ( 1 ) ;
dt = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" , unsichtbar ) ;
// Gruppen von 3 Zeilen auswählen
Zum ( k = 1 , k <= 3 , k ++,
Zum ( ich = k , ich <= N Zeilen ( dt ) , ich = ich + 6 ,
Zeilenzustand ( ich ) = Ausgewählter Staat ( 1 )
)
) ;
Die Liste = Als Liste ( dt << ausgewählte Zeilen erhalten ) ;
dt << Auswahl löschen ;
// Schleife über alle Spalten und setze die Zellenfarben
Kollist = dt << Spaltennamen erhalten ( "Schnur" ) ;
Zum ( ich = 1 , ich <= N Artikel ( Kollist ) , ich ++,
Bewertung (
Ersatz (
Ausdruck (
Spalte ( dt , Kollist [ ich ] ) << Farbzellen ( { "Rot" , _Die Liste_ } )
) ,
Ausdruck ( _Die Liste_ ) , Die Liste
)
)
) ;
// Einrichten des Anzeigefensters
Nw = Neues Fenster ( "Anzeige" ,
V Listenfeld (
tb = Textfeld ( " Das Beispiel" ) ,
vlb = V Listenfeld ()
)
) ;
ndb = dt << Neue Datenbox () ;
vlb << anhängen ( ndb ) ;
ndb << Seitenwände schließen ( 1 ) ;
tb << Schriftgröße einstellen ( 20 ) ;
Es erzeugt das folgende Anzeigefenster

Betreff: Zeilenblöcke in einer Tabellenbox schattierenKönnte sowas machen.
Index = 1 :: 99 ;
neues Fenster ( "Fenster" , tb = TableBox ( NumberColBox ( "Spalte" , Index)));
n= 3 ; //Sie können dies in eine beliebige Nummer Ihrer Gruppe ändern
Zeilen = Ort ( Mod ( Boden ((Index- 1 )/n), 2 ) ); // gibt nur abwechselnde Gruppen von n Bursts zusammen
tb << Ausgewählte Zeilen festlegen (Reihen);
Hoffe das hilft.Prost.
*Bearbeiten* Ich habe gerade festgestellt, dass dies nicht der Teil ist, nach dem Sie wahrscheinlich gefragt haben.Es tut uns leid.
Könnten Sie einfach die Zeilen auswählen und sie dann nicht auswählbar machen?
tb << Auswählbare Zeilen setzen (0);