Ombreggiatura di blocchi di righe in una casella di tabella<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO,
Ho una Table Box che contiene un gran numero di righe che si raggruppano naturalmente in blocchi di tre righe ciascuno (perché le righe da 1 a 3 si riferiscono a un composto chimico, le righe da 4 a 6 si riferiscono a un altro, le righe da 7 a 9 si riferiscono a un terzo , e così via).Vorrei ombreggiare le righe per rendere i blocchi di composti visivamente più facili da distinguere, quindi voglio ombreggiare le righe da 1 a 3, quindi lasciare le righe da 4 a 6 bianche, quindi ombreggiare le righe da 7 a 9, quindi lasciare le righe da 10 a 12 bianco ecc. (Il requisito per l'ombreggiatura di tre righe alla volta significa che non posso semplicemente utilizzare la proprietà "<< ombreggia righe alternate".)
Posso preselezionare ogni blocco alternativo di tre righe con la proprietà "<< imposta righe selezionate()", ma quel modello di colorazione verrebbe perso se l'utente dovesse successivamente fare clic su una qualsiasi delle righe o selezionarle/deselezionarle in altro modo .Ho quindi applicato la stessa proprietà all'interno della proprietà "<< imposta la funzione di cambio riga", quindi se l'utente fa clic in un punto qualsiasi della tabella, l'ombreggiatura viene immediatamente riapplicata.Alla fine mi ritrovo con qualcosa del genere:
listanomi = ripeti({"A"}, 3) || ripeti({"B"}, 3) || ripeti({"C"}, 3) || ripeti({"D"}, 3) || ripeti({"E"}, 3) || ripeti({"F"}, 3) || ripeti({"G"}, 3) || ripeti({"H"}, 3);
treLista = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21};
tb = Tabella Scatola(
String Col Box("Nome", nameList),
Numero Col Box("Primo", indice(1, 24)),
Numero Col Box("Secondo", indice(25, 48)),
Numero Col Box("Terzo", indice(49, 72)),
<
<
<< imposta la funzione di cambio riga (tb << imposta le righe selezionate (treList)),
<< imposta scorrevole(1),
<
<
);
nuova finestra("La mia finestra", tb);
Funziona, ma sembra un po' contorto.Qualcuno può suggerire un modo più semplice per farlo?
Grazie molto.
Ri: Ombreggiatura di blocchi di righe in una casella di tabellaGiusto per rispondere ad alcune delle tue preoccupazioni sull'utilizzo di una nuova visualizzazione dati:
Tutto ciò che devi fare per indirizzare le azioni degli utenti è aggiungere un gestore dello stato della riga.Rileverà le modifiche e passerà a una funzione in cui è possibile risolvere il problema in modo programmatico.Come in questo caso, se la vista fosse ordinata, potresti reimpostare i colori delle celle sul nuovo ordine
F = funzione ({ UN } ,< ripristinare i colori delle celle > ) ;
rs = dt << crea il gestore rowstate ( F ) ;
Ri: Ombreggiatura di blocchi di righe in una casella di tabellaGrazie a tutti, è stato estremamente utile a tutto tondo e segnerò il problema come risolto, poiché ora ne ho abbastanza per risolvere la mia domanda originale.
Ho provato il suggerimento di Vince di impostare la proprietà "<< set selectable rows(0)" dopo aver creato la casella della tabella con la selezione richiesta, sfortunatamente tuttavia sembra che così facendo si cancelli effettivamente la selezione prima che abbia effetto.
Ho preso una copia dello script di Jim, poiché invariabilmente ho difficoltà con la sintassi delle combinazioni delle costruzioni eval(), replace() ed expr(), e avere esempi funzionanti da adattare rende la vita molto più semplice!In realtà rimarrò con la mia Table Box almeno per il momento, poiché la struttura del report che sto creando è più adatta a quel formato di output, ma il percorso New Data Box è qualcosa che non avevo considerato in precedenza , e potrebbe essere utile in futuro.
In una comunicazione privata mi è stato anche fatto notare che potrei dover considerare l'impatto sulla mia soluzione di un utente che tenta successivamente di ordinare la Table Box in base a una delle sue colonne (cosa che potrebbe facilmente fare con un clic con il tasto destro) .In realtà questo non sarebbe un problema in questo caso, poiché la Table Box fa parte di un rapporto finale in cui un ulteriore ordinamento non servirebbe a nessuno scopo utile, ma il punto è ben interpretato.
Infine, ho notato di sfuggita che la proprietà "<< set row change function()" in realtà non lo farà lavoro a meno che una o più righe non siano state selezionate esplicitamente dalla proprietà "<< setselected rows()" o una proprietà "<< set selectable rows(1)" sia stata inclusa nell'elenco delle impostazioni delle proprietà.È solo una piccola cosa, ma mi ha confuso finché non ho realizzato che almeno uno di questi era necessario prima di poter fare quello che stavo cercando di fare.
Ancora una volta, molte grazie a tutti.
Ri: Ombreggiatura di blocchi di righe in una casella di tabellaIl modo in cui lo gestisco è utilizzare una funzione New Data Box() e non utilizzare Table Box(), ma piuttosto una tabella dati.In questo modo puoi colorare le celle, ecc. e sfruttare appieno tutte le funzionalità di modifica di una tabella dati.
Ecco uno script per illustrare di cosa sto parlando:
Nomi predefiniti qui ( 1 ) ;
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" , invisibile ) ;
// Seleziona gruppi di 3 righe
Per ( K = 1 , K <= 3 , K ++,
Per ( io = K , io <= N righe ( dt ) , io = io + 6 ,
Stato riga ( io ) = Stato selezionato ( 1 )
)
) ;
la lista = Come elenco ( dt << ottenere le righe selezionate ) ;
dt << Cancella Seleziona ;
// Passa attraverso tutte le colonne e imposta i colori delle celle
collisione = dt << ottenere i nomi delle colonne ( "corda" ) ;
Per ( io = 1 , io <= N articoli ( collisione ) , io ++,
Val (
Sostituire (
Espr (
Colonna ( dt , collisione [ io ] ) << celle di colore ( { "Rosso" , _la lista_ } )
) ,
Espr ( _la lista_ ) , la lista
)
)
) ;
// Imposta la finestra di visualizzazione
Ora = Nuova finestra ( "Schermo" ,
Casella di riepilogo V (
t.b = Casella di testo ( " L'esempio" ) ,
vlb = Casella di riepilogo V ()
)
) ;
ndb = dt << Nuova casella dati () ;
vlb << aggiungere ( ndb ) ;
ndb << chiudere i pannelli laterali ( 1 ) ;
t.b << impostare la dimensione del carattere ( 20 ) ;
Produce la seguente finestra di visualizzazione

Ri: Ombreggiatura di blocchi di righe in una casella di tabellaPotrebbe fare qualcosa del genere.
indice = 1 :: 99 ;
nuova finestra ( "Finestra" , tb = TabellaBox ( NumeroColBox ( "Colonna" , indice)));
n= 3 ; //Puoi cambiarlo con qualunque numero sia il tuo gruppo
righe = loc ( mod ( pavimento ((indice- 1 )/N), 2 ) ); // fornisce semplicemente gruppi alternati di n burst insieme
tb << Imposta le righe selezionate (righe);
Spero che questo ti aiuti.Saluti.
*Modifica* Ho appena realizzato che questa non è la parte di cui probabilmente stavi chiedendo.Scusa.
Potresti semplicemente selezionare le righe e poi renderle non selezionabili?
tb << Imposta righe selezionabili (0);