Necesito ayuda para completar el cuadro de lista de columnasParte de la GUI de mi aplicación tiene un botón que abre una tabla y un cuadro de lista de columnas que necesito completar con columnas de esa tabla.
Si abro la tabla primero y luego creo Col Lis Box como en este ejemplo modificado de Scripting Index, todo funciona bien:
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);
Sin embargo, si creo la ventana con GUI que tiene un botón para abrir la tabla, es decir Primero creo Col List Box y luego abro la tabla, deja de funcionar. Esta es una versión simplificada del código real, pero tiene el mismo problema: el cuadro de lista de columnas no se llena con los nombres de las columnas.
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;
);
¿Qué estoy haciendo mal? ¿Cómo puedo hacer que funcione?
Automatización y secuencias de comandosIngeniería de Calidad y ProcesosRe: Necesito ayuda para llenar el cuadro de lista de columnasSí, esta es una forma válida de abordar esto. Reescribí esto ligeramente para mostrar otra forma de llegar al mismo resultado:
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: Necesito ayuda para llenar el cuadro de lista de columnasDado que uso este cuadro de lista de columnas para emitir columnas en muchos roles diferentes usando botones y otros cuadros de lista de columnas (como en cualquier plataforma), necesito volver a crear MUCHOS cuadros de lista de columnas, con diferentes configuraciones, etc. Así que escribí una función universal para eso:
refreshDisplayBox = Function({dt, box, expr},
parent = box << Parent;
box << Delete Box;
parent << Append(box = expr);
Return (box);
);dt es necesario aquí en caso de que se use en expr para volver a crear el cuadro de visualización. Se pasa a la función independientemente del identificador de esa tabla que esté usando fuera de la función. Solo necesita recordar escribir todas las expresiones con "dt" para eso.
Entonces el script se verá así:
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;
);
Déjame saber si este es un enfoque válido.
Re: Necesito ayuda para llenar el cuadro de lista de columnasOk, parece que cuando se crea ColListBox, está conectado a la tabla de datos actual. Y solo puede agregar columnas desde ese DT.
Entonces, dado que necesito mostrar columnas de diferentes DT en mi GUI en el mismo COLLIstBox, necesito redefinirlo cada vez. Elimine el anterior y cree uno nuevo en su lugar.
Esto parece estar funcionando, avíseme si hay una solución mejor:
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;
);