Blocchi di ombreggiatura di righe in una casella tabella<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Ho una tabella che contiene un gran numero di righe che si raggruppano naturalmente in blocchi di tre righe ciascuna (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 visivamente più facili da distinguere i blocchi di composti, 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 tale schema di colorazione andrebbe perso se l'utente dovesse successivamente fare clic su una qualsiasi delle righe o altrimenti selezionarle/deselezionarle .Ho quindi applicato la stessa proprietà all'interno della proprietà "<< imposta la funzione di modifica della riga", quindi se l'utente fa clic in un punto qualsiasi della tabella, l'ombreggiatura viene immediatamente riapplicata.Finisco con qualcosa del genere:
nameList = repeat({"A"}, 3) || repeat({"B"}, 3) || repeat({"C"}, 3) || ripeti({"D"}, 3) || repeat({"E"}, 3) || repeat({"F"}, 3) || repeat({"G"}, 3) || ripeti({"H"}, 3);
treLista = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21};
tb = Scatola da tavolo(
String Col Box("Nome", lista dei nomi),
Numero Col Box("Primo", indice(1, 24)),
Numero Col Box("Secondo", indice(25, 48)),
Numero Col Box("Terzo", indice(49, 72)),
<< imposta il colore della riga selezionata ("ciano"),
<< imposta le righe selezionate (tre List),
<< imposta la funzione di cambio riga (tb << imposta le righe selezionate (tre elenco)),
<< imposta scorrevole(1),
<< imposta i bordi delle colonne(1),
<< imposta i titoli di sottolineatura(1)
);
nuova finestra("La mia finestra", tb);
Funziona, ma sembra un po' contorto.Qualcuno può suggerire un modo più semplice per farlo?
Grazie molto.
Re: Ombreggiatura blocchi di righe in una casella tabellaSolo 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 affrontare il problema in modo programmatico.Come in questo caso, se la visualizzazione è stata ordinata, è possibile reimpostare i colori delle celle sul nuovo ordine
f = funzione ({ un } ,< reimposta i colori delle celle > ) ;
rs = dt << crea il gestore dello stato di riga ( f ) ;
Re: Ombreggiatura blocchi di righe in una casella tabellaGrazie a tutti - è stato estremamente utile in tutto e per tutto, e ho intenzione di spuntare il problema come risolto, poiché ora 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 in questo modo la selezione venga effettivamente cancellata prima che abbia effetto.
Ho preso una copia dello script di Jim, poiché ho invariabilmente difficoltà con la sintassi delle combinazioni di costruzioni eval(), replacement() ed expr(), e avere esempi funzionanti da adattare rende la vita molto più semplice!In realtà rimarrò con il mio 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.
Mi è stato anche fatto notare in una comunicazione privata che potrei aver bisogno di considerare l'impatto sulla mia soluzione di un utente che successivamente tenta di ordinare il 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é il Table Box fa parte di un rapporto finale in cui un ulteriore ordinamento non servirebbe a nessuno scopo utile, ma il punto è ben compreso.
Infine, ho notato di passaggio che la proprietà "<< set row change function()" in realtà non lo farà opera a meno che una o più righe non siano state selezionate in modo esplicito dalla proprietà "<< set selected rows()" o sia stata inclusa una proprietà "<< set selectable rows(1)" nell'elenco delle impostazioni della proprietà.È solo una piccola cosa, ma mi ha confuso fino a quando ho capito che almeno uno di questi era necessario prima che potessi fare quello che stavo cercando di fare.
Ancora, molte grazie a tutti.
Re: Ombreggiatura di blocchi di righe in una casella tabellaIl modo in cui lo gestisco è usare una funzione New Data Box() e non usare una Table Box(), ma piuttosto una tabella di dati.Con ciò, puoi colorare le celle, ecc. e sfruttare appieno tutte le capacità di modifica di una tabella di dati.
Ecco uno script per illustrare di cosa sto parlando:
Nomi predefiniti qui ( 1 ) ;
dt = Aprire ( "$SAMPLE_DATA/Big Class.jmp" , invisibile ) ;
// Seleziona gruppi di 3 righe
Per ( K = 1 , K <= 3 , K ++,
Per ( io = K , io <= N righe ( dt ) , io = io + 6 ,
Stato di riga ( io ) = Stato selezionato ( 1 )
)
) ;
la lista = Come elenco ( dt << ottenere le righe selezionate ) ;
dt << Deseleziona Seleziona ;
// Passa su tutte le colonne e imposta i colori delle celle
collistare = dt << ottenere i nomi delle colonne ( "corda" ) ;
Per ( io = 1 , io <= N articoli ( collistare ) , io ++,
val (
Sostituto (
espr (
Colonna ( dt , collistare [ io ] ) << cellule di colore ( { "Rosso" , _la lista_ } )
) ,
espr ( _la lista_ ) , la lista
)
)
) ;
// Imposta la finestra di visualizzazione
Nw = Nuova finestra ( "Schermo" ,
Casella di riepilogo V (
tb = Casella di testo ( " L'esempio" ) ,
vlb = Casella di riepilogo V ()
)
) ;
ndb = dt << Nuova casella dati () ;
vlb << aggiungere ( ndb ) ;
ndb << chiudere i pannelli laterali ( 1 ) ;
tb << imposta la dimensione del carattere ( 20 ) ;
Produce la seguente finestra di visualizzazione

Re: Ombreggiatura blocchi di righe in una casella tabellaPotrebbe fare qualcosa del genere.
indice = 1 :: 99 ;
nuova finestra ( "Finestra" , TB = TableBox ( NumeroColBox ( "Colonna" , indice)));
n= 3 ; //Puoi cambiarlo in qualsiasi numero sia il tuo gruppo
righe = loc ( mod ( pavimento ((indice- 1 )/n), 2 ) ); // fornisce solo gruppi alternati di n burst insieme
tb << Imposta le righe selezionate (righe);
Spero che sia di aiuto.Saluti.
*Modifica* Mi sono appena reso conto che questa non è la parte di cui probabilmente stavi chiedendo.Scusate.
Potresti semplicemente selezionare le righe, quindi renderle deselezionabili?
tb << Imposta righe selezionabili(0);