Schattieren Sie Zeilenblöcke in einem Tabellenfeld<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
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 (da sich die Zeilen 1 bis 3 auf eine chemische Verbindung beziehen, die Zeilen 4 bis 6 auf eine andere und die Zeilen 7 bis 9 auf eine dritte , und so weiter).Ich möchte die Reihen schattieren, um die Verbindungsblöcke optisch besser unterscheiden zu können – also möchte ich die Reihen 1 bis 3 schattieren, dann die Reihen 4 bis 6 weiß lassen, dann die Reihen 7 bis 9 schattieren und dann die Reihen 10 bis 12 belassen Weiß usw. (Die Anforderung, jeweils drei Reihen zu schattieren, bedeutet, dass ich nicht einfach die Eigenschaft „<< abwechselnde Reihen schattieren“ verwenden kann.)
Ich kann jeden alternativen Block aus 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 klickt oder sie auf andere Weise auswählt/abwählt .Deshalb habe ich die gleiche Eigenschaft innerhalb der Eigenschaft „<< Zeilenänderungsfunktion festlegen“ angewendet – wenn der Benutzer also irgendwo auf die Tabelle klickt, wird die Schattierung sofort wieder angewendet.Am Ende habe ich so etwas:
nameList = wiederholen({"A"}, 3) || wiederholen({"B"}, 3) || wiederholen({"C"}, 3) || wiederholen({"D"}, 3) || wiederholen({"E"}, 3) || wiederholen({"F"}, 3) || wiederholen({"G"}, 3) || wiederholen({"H"}, 3);
threeList = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21};
tb = Tabellenbox(
String Col Box("Name", nameList),
Number Col Box("First", index(1, 24)),
Number Col Box("Second", index(25, 48)),
Number Col Box("Third", index(49, 72)),
<< Farbe der ausgewählten Zeile festlegen („Cyan“),
<< Ausgewählte Zeilen festlegen (drei Liste),
<< Zeilenänderungsfunktion festlegen (tb << ausgewählte Zeilen festlegen (drei Liste)),
<< set scrollable(1),
<< Spaltenränder festlegen(1),
<< Unterstreichungsüberschriften festlegen(1)
);
neues Fenster("Mein Fenster", tb);
Das funktioniert, wirkt aber etwas kompliziert.Kann jemand einen einfacheren Weg vorschlagen, dies zu tun?
Vielen Dank.
Betreff: Schattieren von Zeilenblöcken in einem TabellenfeldUm einige Ihrer Bedenken hinsichtlich der Verwendung einer neuen Datenansicht auszuräumen:
Alles, was Sie tun müssen, um auf die Aktionen des Benutzers einzugehen, ist das Hinzufügen eines Zeilenstatus-Handlers.Es erkennt die Änderungen und verzweigt zu einer Funktion, in der Sie das Problem programmgesteuert beheben können.Wenn die Ansicht beispielsweise sortiert war, können Sie in diesem Fall die Zellenfarben auf die neue Reihenfolge zurücksetzen
F = Funktion ({ A } ,< Zellenfarben zurücksetzen > ) ;
rs = dt << Machen Sie einen Rowstate-Handler ( F ) ;
Betreff: Schattieren von Zeilenblöcken in einem TabellenfeldVielen 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 Frage zu lösen.
Ich habe den Vorschlag von Vince ausprobiert, die Eigenschaft „<< set selectable rows(0)“ festzulegen, nachdem das Tabellenfeld mit der erforderlichen Auswahl erstellt wurde. Leider scheint es jedoch, dass dadurch die Auswahl tatsächlich gelöscht wird, bevor sie wirksam wird.
Ich habe eine Kopie von Jims Skript genommen, da ich immer Schwierigkeiten mit der Syntax von Kombinationen aus eval()-, replacement()- und expr()-Konstruktionen habe und funktionierende Beispiele zum Anpassen das Leben viel einfacher machen!Eigentlich werde ich zumindest vorerst bei meiner Tabellenbox bleiben, da die Struktur des Berichts, den ich erstelle, besser für dieses Ausgabeformat geeignet ist – aber die Route „Neue Datenbox“ ist etwas, was ich bisher nicht in Betracht gezogen habe , und könnte in Zukunft durchaus 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, das Tabellenfeld nach einer seiner Spalten zu sortieren (was er problemlos 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 verstanden.
Abschließend habe ich nebenbei bemerkt, dass die Eigenschaft „<< set row change function()“ dies eigentlich nicht tut arbeiten es sei denn, eine oder mehrere Zeilen wurden explizit durch die Eigenschaft „<< set selected rows()“ ausgewählt oder eine Eigenschaft „<< set selectable rows(1)“ wurde in die Liste der Eigenschaftseinstellungen aufgenommen.Es ist nur eine Kleinigkeit, aber sie hat mich verwirrt, bis mir klar wurde, dass mindestens eine davon notwendig war, bevor ich das tun konnte, was ich versuchte.
Nochmals vielen Dank an alle.
Betreff: Schattieren von Zeilenblöcken in einem TabellenfeldIch gehe damit um, indem ich eine New Data Box()-Funktion verwende und keine Table Box(), sondern eine Datentabelle.Damit können Sie die Zellen usw. einfärben und alle Bearbeitungsmöglichkeiten einer Datentabelle voll ausnutzen.
Hier ist ein Skript, um zu veranschaulichen, wovon ich spreche:
Namen standardmäßig hier ( 1 ) ;
dt = Offen ( „$SAMPLE_DATA/Big Class.jmp“ , unsichtbar ) ;
// Gruppen von 3 Zeilen auswählen
Für ( k = 1 , k <= 3 , k ++,
Für ( ich = k , ich <= N Zeilen ( dt ) , ich = ich + 6 ,
Zeilenstatus ( ich ) = Ausgewählter Staat ( 1 )
)
) ;
Die Liste = Als Liste ( dt << Holen Sie sich ausgewählte Zeilen ) ;
dt << Deaktivieren Sie „Auswahl“. ;
// Schleife über alle Spalten und Festlegen der Zellenfarben
collist = dt << Spaltennamen abrufen ( „Zeichenfolge“ ) ;
Für ( ich = 1 , ich <= N Artikel ( collist ) , ich ++,
Bewertung (
Ersatz (
Ausdruck (
Spalte ( dt , collist [ ich ] ) << Farbzellen ( { "Rot" , _Die Liste_ } )
) ,
Ausdruck ( _Die Liste_ ) , Die Liste
)
)
) ;
// Richten Sie das Anzeigefenster ein
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 wird das folgende Anzeigefenster erzeugt

Betreff: Schattieren von Zeilenblöcken in einem TabellenfeldKönnte so etwas 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
Reihen = loc ( 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.Entschuldigung.
Könnten Sie einfach die Zeilen auswählen und sie dann nicht mehr auswählbar machen?
tb << Set Selectable rows(0);