Erstellen Sie einen ZeilenstatushandlerHallo,
Ich habe einen JSL-Code zum Anhängen von Schaltflächenfeldern für die Zeilenauswahl. Das Problem besteht darin, dass immer wieder doppelte Felder angehängt werden, selbst wenn nur 1 Zeile ausgewählt ist. Ich möchte nur 'n' Felder für 'n' ausgewählte Zeilen anhängen. Wenn keine Zeilen ausgewählt sind, sollten alle Felder im Tabellenfeld gelöscht werden.
Durch die Auswahl einer einzigen Zeile wurden 10 Felder hinzugefügt.

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>Automatisierung und Skripting</LINGO-LABEL></LINGO-LABS>Betreff: Zeilenstatus-Handler erstellenSie müssen die alten Kartons irgendwie entfernen.
Ich bin nicht sicher, ob das Ihren Wünschen entspricht, aber ich habe Ihr Skript ziemlich stark modifiziert.
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);
Betreff: Zeilenstatushandler erstellenKann ich eine Endlosschleife vermeiden, wenn ich die Funktion f zum Auswählen mehrerer Punkte benötige?
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();
);
);
Betreff: Zeilenstatushandler erstellenEine Möglichkeit besteht darin, einige zusätzliche Prüfungen hinzuzufügen:
- Es wurden neue Zeilen ausgewählt (und möglicherweise wurden neue Werte ausgewählt)
- Und dass die Auswahl nicht durch << Passende Zellen auswählen
Es wird wahrscheinlich immer noch ziemlich klobig sein, aber es ist höchstwahrscheinlich das Beste, was Sie bekommen können. Besser wäre es möglicherweise, für die Auswahl einen (globalen) Datenfilter zu verwenden.