Come faccio a creare una casella combinata per mostrare valori univoci?Carissimi,
Questo script è simile a quello del libro "JUMP into JMP".
Lo script richiede all'utente di selezionare un "DCM", in base a questa selezione viene popolato l'elenco "DieNo".
Ci sono un paio di problemi qui. L'elenco "Numero DCM" non è in ordine crescente.
Altro problema, quando seleziono un numero DCM, viene popolato l'elenco "DieNo". Ma questo elenca tutti i valori, voglio che vengano elencati solo valori univoci.
Per entrambe le colonne il tipo di dati è char, tuttavia il tipo di dati numerico non funziona qui. Qualsiasi consiglio su questo problema.
/* Open the sample data table */
dt = Open( "$Desktop/JMP scripts/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
Unique DCM=Associative array(dt:DCMNo);
nitems(unique DCM);
DCM1= unique DCM<<GET keys=""></GET>
Sto anche cercando di includere la casella combinata di selezione della data. Il post migliore e l'opzione facile per questo era "filtro dati data".
JMP mi consente di mostrare un calendario per le date {Un piccolo calendario come mostrato quando prenotiamo i voli dalla data di partenza alla data di arrivo}.
Saluti
San
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?L'indice e la guida di scripting sono alquanto deboli per quanto riguarda questa nuova funzione. Gli esempi nella guida allo scripting potrebbero essere un po' rinforzati. Eccone uno migliore che mostra il calendario. Quando si seleziona una data e si fa clic su OK che viene stampato nella finestra del registro.
Names Default To Here( 1 );
nw = New Window( "Calendar Box Example",
cal = Calendar Box(),
ok_button = button box("OK",
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
nw << close window;
)
);
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?Non è necessaria una finestra modale per utilizzare la casella del calendario.
La casella del calendario funziona come una casella di modifica dei numeri specializzata. Gestisce le date per te in modo da non dover fare confusione con i formati o convertire i secondi in date o ora.
Vedere Scripting Index o Scripting Guide per il protocollo dei messaggi.
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?Non sapevo della nuova casella di visualizzazione calendario () in JMP 13. Bello! Come lo usi però? Ho dovuto rendere modale la finestra di dialogo per far sì che restituisse qualcosa.
Names Default To Here( 1 );
New Window( "Calendar Box Example", << modal(),
cal = Calendar Box()
);
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?Inoltre, puoi utilizzare una Casella Modifica Numero() con un formato data o la nuova Casella Calendario(). Entrambi funzionano bene ma presentano un'interfaccia diversa per l'utente.
Ecco l'approccio Number Edit Box(), dall'indice di scripting:
Names Default To Here( 1 );
New Window( "Example",
fontobj = numbox = Number Edit Box( 0 )
);
numbox << Set Format( Format( "m/d/y", 12 ) );
numbox << Set( Date MDY( 10, 2, 1989 ) );
Ecco la soluzione Calendar Box(), anch'essa presa dallo Scripting Index:
Names Default To Here( 1 );
New Window( "Calendar Box Example",
cal = Calendar Box()
);
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?L'elenco DCM è in ordine alfabetico. Stai interpretando il DCM come un numero. JMP interpreta DCM come una stringa di caratteri.
Perché i valori numerici non funzionano per DCM o Die? Quel tipo di dati risolverebbe il tuo problema di ordinazione.
Ho ripulito alcune cose per una soluzione più breve. Ecco qui:
Names Default to Here( 1 );
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Ri: Come faccio a creare una casella combinata per mostrare valori univoci?Perché se non seleziono gli altri numeri nella casella a discesa e uso il valore predefinito, mi dà un errore; se seleziono gli altri numeri non mi da errore.
Sono la versione 17, mac.
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?@lishuanglin Potresti creare una nuova discussione con uno script di esempio?
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?È lo script di Mark ei dati forniti in questo post che ho trovato nell'eseguirlo che premendo i numeri della casella a discesa predefinita senza modificarli mi dà un errore; la selezione di altri numeri va bene.
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Ri: Come faccio a creare una casella combinata per mostrare valori univoci?Controllando molto rapidamente lo script, il problema è che lo script all'interno della casella combinata non viene attivato alla creazione iniziale. La soluzione più semplice è aggiungere qualcosa di simile
select1 << Set(2, Run Script(0));
select1 << Set(1, Run Script(1));
alla fine della sceneggiatura. Questo cambierà il valore nella casella combinata e quindi attiverà lo script una volta.
Un'altra opzione abbastanza semplice sarebbe cambiare lo script all'interno della casella combinata in espressione e quindi eseguirlo una volta creata la finestra.
Visualizza altro...
Oppure usa << Get Function alla fine dello script con Eval
Eval(select1 << get function);
Ri: Come faccio a creare una casella combinata per mostrare valori univoci?Grazie !