Hai bisogno di aiuto per popolare Col List BoxParte della GUI della mia app ha un pulsante che apre una tabella e una casella di riepilogo Col che devo popolare con le colonne di quella tabella.
Se apro prima la tabella e poi creo Col Lis Box come in questo esempio modificato da Scripting Index, tutto funziona correttamente:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "Col List Box Example",
lb = Col List Box()
);
lb << Append (dt << Get Column Names);
Tuttavia, se creo la finestra con la GUI che ha il pulsante per aprire la tabella, ad es Creo prima Col List Box e poi apro la tabella, smette di funzionare. Questa è una versione semplificata del codice reale ma presenta lo stesso problema: Col List Box non viene popolato con i nomi delle colonne.
Names Default To Here( 1 );
open = Expr(dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); lb << Append (dt << Get Column Names););
gui = Expr(V List Box(btn = Button Box ("OPEN", open), lb = Col List Box()));
New Window( "Col List Box Example",
gui;
);
Che cosa sto facendo di sbagliato? Come posso farlo funzionare?
Automazione e scriptingQualità e ingegneria di processoRe: Ho bisogno di aiuto per popolare Col List BoxSì, questo è un modo valido per avvicinarsi a questo. L'ho riscritto leggermente per mostrare un altro modo per ottenere lo stesso risultato:
Names Default To Here( 1 );
LoadTable = function( {dtname}, {dt, lbnew},
dt = open("$SAMPLE_DATA/" || dtname);
lbnew = Col List Box(dt, all);
window:lb << Delete Box;
window:pb << Append( window:lb = lbnew );
win << Bring Window to Front;
);
win = New Window( "Col List Box Example",
vlb = V List Box(
H List Box(
window:clb = List Box( { "Big Class.jmp", "Iris.jmp" } ),
window:btn = Button Box ("OPEN", LoadTable((window:clb << Get Selected)[1]) )
),
window:pb = Panel Box("Column List",
window:lb = Col List Box()
)
)
);Re: Ho bisogno di aiuto per popolare Col List BoxDato che utilizzo questa casella di riepilogo colonne per lanciare colonne in molti ruoli diversi utilizzando i pulsanti e un'altra casella di riepilogo colonne (come in qualsiasi piattaforma), ho bisogno di ricreare MOLTE caselle di riepilogo colonne, con impostazioni diverse ecc. Quindi ho scritto una funzione universale per quello:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);dt è necessario qui nel caso in cui venga utilizzato in expr per ricreare la casella di visualizzazione. Viene passato nella funzione indipendentemente dall'handle per quella tabella che stai utilizzando al di fuori della funzione. Devi solo ricordarti di scrivere tutte le espressioni con "dt" per questo.
Quindi lo script sarà simile a questo:
Names Default To Here( 1 );
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);
colListExpr = Expr(Col List Box(dt/*use generic dt*/, all));
open = Expr(dtEXT/*different table name*/ = Open( "$SAMPLE_DATA/Big Class.jmp" ); lb = refreshDisplayBox(dtEXT/*pass it into the function*/, lb, colListExpr));
gui = Expr(V List Box(btn = Button Box ("OPEN", open), pb = Panel Box("Column List", lb = Col List Box())));
New Window( "Col List Box Example",
gui;
);
Fammi sapere se questo è un approccio valido.
Re: Ho bisogno di aiuto per popolare Col List BoxOk, sembra che quando viene creato ColListBox sia connesso alla tabella dati corrente. E puoi solo aggiungere colonne da quel DT.
Quindi, poiché ho bisogno di mostrare colonne da diversi DT nella mia GUI nello stesso COlLIstBox, devo ridefinirlo ogni volta. Elimina quello vecchio e creane uno nuovo.
Questo sembra funzionare, per favore fatemi sapere se c'è una soluzione migliore:
Names Default To Here( 1 );
open = Expr(dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); refreshColList;);
refreshColList = Expr(
(pb << Child) << Delete Box;
pb << Append(lb = Col List Box(dt, all));
);
gui = Expr(V List Box(btn = Button Box ("OPEN", open), pb = Panel Box("Column List", lb = Col List Box())));
New Window( "Col List Box Example",
gui;
);