Crea un gestore dello stato della rigaCIAO,
Ho un codice JSL per aggiungere caselle di pulsanti per la selezione della riga. Il problema è che continua ad aggiungere caselle duplicate anche se è selezionata solo 1 riga. Voglio solo aggiungere la casella "n" per le righe selezionate "n". Se non viene selezionata alcuna riga, dovrebbero essere eliminate tutte le caselle nella casella della tabella
Ha aggiunto 10 caselle semplicemente selezionando 1 riga.

Names Default To Here( 1 );
dt2 = Open( "$SAMPLE_DATA/Iris.jmp", invisible );
New Window( "",
H List Box(
Graph Builder(
Size( 653, 571 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ), Overlay( :Species ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "Sepal length", ScaleBox, {Min( 4.02451368343195 ), Max( 8.24903846153846 ), Inc( 1 ), Minor Ticks( 0 )} ),
Dispatch( {}, "Sepal width", ScaleBox, {Min( 1.75 ), Max( 5.00400457665904 ), Inc( 1 ), Minor Ticks( 0 )} )
)
),
Spacer Box( size( 10, 0 ) ),
Outline Box( "Petal Species",
Spacer Box( size( 0, 10 ) ),
Scroll Box(
size( 350, 150 ),
disoi = Table Box(
colbox = Col Box( "Species" ),
//imvinum = Number Col Edit Box( "iMINum", {} ),
)
),
disoi << set selectable rows( 0 ),
)
)
);
f = Function( {this},
dt2 << begin data update;
list = {};
checnro = N Items( dt2 << getselectedrows );
For( i = 1, i <= checnro, i++,
Insert Into( list, dt2:Species[dt2 << getselectedrows][i] );
);
For Each( {wascc, idx}, list,
//For( k = 1, k <= N Items( list ), k++,
colbox << append(
Eval(
Parse(
"ex" || Char( idx ) ||
" = Button Box( wascc
,
New Window( \!"Wikipedia\!",
<<TYPE></TYPE><LINGO-LABS id="lingo-labs-755955" slang="en-US" mode="CREATE"><LINGO-LABEL>Automazione e scripting</LINGO-LABEL></LINGO-LABS>Ri: Crea un gestore dello stato della rigaGrazie Jarmo!
Questo è esattamente quello che voglio.
Possiamo riordinare le colonne nella casella della tabella? Nvm ho capito
Re: Crea gestore dello stato della rigaSarà necessario in qualche modo rimuovere le vecchie scatole.
Non sono sicuro che questo faccia ciò che desideri, ma ho apportato modifiche piuttosto pesanti al tuo script
Names Default To Here(1);
dt2 = Open("$SAMPLE_DATA/Iris.jmp", invisible);
dt2 << Clear Select;
nw = New Window("",
H List Box(
Graph Builder(
Size(653, 571),
Show Control Panel(0),
Variables(X(:Sepal length), Y(:Sepal width), Overlay(:Species)),
Elements(Points(X, Y, Legend(6)))
),
Spacer Box(size(10, 0)),
Outline Box("Petal Species",
Spacer Box(size(0, 10)),
Scroll Box(
size(350, 150),
tb_species = Table Box(,<< set selectable rows(0))
)
)
)
);
add_buttons = Function({a},
selrows = dt2 << get selected rows;
sel_species = Associative Array(dt2[selrows, "Species"]) << get keys;
new_colbox = Col Box("Species");
For Each({cur_species, idx}, sel_species,
new_colbox << append(
Button Box(cur_species
, << Set Function(function({this},
New Window("Wikipedia", Web Browser Box("https://en.wikipedia.org/wiki/Iris_" || (this << get button name)));
))
, << Underline Style(1),
)
)
);
Try(tb_species[ColBox(1)] << Delete Box());
tb_species << append(new_colbox);
);
rs = dt2 << make row state handler(add_buttons);
Re: Crea gestore dello stato della rigaSe ho bisogno della funzione f per selezionare più punti, posso evitare un ciclo infinito?
rs = dt << Make Row State Handler( f );
f = Function( {a},
r = dt << Get Selected Rows;
If( N Items( r ) > 0,
dt << Go To( :lot );
dt << Select Matching Cells();
);
);
Re: Crea gestore dello stato della rigaUn'opzione è quella di aggiungere alcuni controlli extra:
- Sono state selezionate nuove righe (e probabilmente sono stati selezionati nuovi valori)
- E che la selezione non è stata effettuata da << Seleziona celle corrispondenti
Probabilmente sarà ancora un po' macchinoso, ma è probabilmente il meglio che puoi ottenere. Potrebbe essere meglio usare il Filtro Dati (Globale) per le selezioni.