Sombrear bloques de filas en un cuadro de tabla<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Tengo un cuadro de tabla que contiene una gran cantidad de filas que se agrupan naturalmente en bloques de tres filas cada uno (porque las filas 1 a 3 se relacionan con un compuesto químico, las filas 4 a 6 se relacionan con otro, las filas 7 a 9 se relacionan con un tercero). , etcétera).Me gustaría sombrear las filas para que los bloques de compuestos sean visualmente más fáciles de distinguir, así que quiero sombrear las filas 1 a 3, luego dejar las filas 4 a 6 en blanco, luego sombrear las filas 7 a 9, luego dejar las filas 10 a 12. blanco, etc. (El requisito de sombrear tres filas a la vez significa que no puedo usar simplemente la propiedad "<< sombrear filas alternativas").
Puedo preseleccionar cada bloque alternativo de tres filas con la propiedad "<< establecer filas seleccionadas ()", pero ese patrón de color se perdería si el usuario posteriormente hiciera clic en cualquiera de las filas o las seleccionara/deseleccionara de otro modo. .Por lo tanto, apliqué la misma propiedad dentro de la propiedad "<< establecer función de cambio de fila", de modo que si el usuario hace clic en cualquier lugar de la tabla, el sombreado se vuelve a aplicar inmediatamente.Termino con algo como esto:
lista de nombres = repetir({"A"}, 3) || repetir({"B"}, 3) || repetir({"C"}, 3) || repetir({"D"}, 3) || repetir({"E"}, 3) || repetir({"F"}, 3) || repetir({"G"}, 3) || repetir({"H"}, 3);
tresLista = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21};
tb = cuadro de tabla (
String Col Box("Nombre", lista de nombres),
Cuadro de columna numérica("Primero", índice(1, 24)),
Cuadro de columna numérica("Segundo", índice(25, 48)),
Cuadro de columna numérica("Tercero", índice(49, 72)),
<< establecer el color de la fila seleccionada("cian"),
<< establecer filas seleccionadas (tres listas),
<< establecer la función de cambio de fila (tb << establecer filas seleccionadas (tres listas)),
<< establecer desplazable (1),
<< establecer bordes de columna (1),
<< establecer encabezados subrayados(1)
);
nueva ventana("Mi ventana", tb);
Esto funciona, pero parece un poco complicado.¿Alguien puede sugerir una forma más fácil de hacerlo?
Muchas gracias.
Re: Sombrear bloques de filas en un Table BoxSolo para abordar algunas de sus inquietudes sobre el uso de una nueva vista de datos:
Todo lo que necesita hacer para abordar las acciones de los usuarios es agregar un controlador de estado de fila.Detectará los cambios y pasará a una función, en la que podrá abordar el problema mediante programación.Como en este caso, si la vista estaba ordenada, podría restablecer los colores de las celdas al nuevo orden.
F = función ({ a } ,< restablecer colores de celda > ) ;
rs = dt << hacer controlador de estado de fila ( F ) ;
Re: Sombrear bloques de filas en un Table BoxGracias a todos. Ha sido de gran ayuda en todos los aspectos y marcaré el problema como resuelto, ya que ahora tengo suficiente para resolver mi consulta original.
Probé la sugerencia de Vince de configurar la propiedad "<< establecer filas seleccionables (0)" después de crear el cuadro de tabla con la selección requerida; desafortunadamente, parece que al hacer esto se borra la selección antes de que surta efecto.
Tomé una copia del script de Jim, ya que invariablemente tengo dificultades con la sintaxis de combinaciones de construcciones eval(), sustituto() y expr(), ¡y tener ejemplos prácticos para adaptar hace la vida mucho más fácil!De hecho, me quedaré con mi Table Box al menos por el momento, ya que la estructura del informe que estoy creando se adapta mejor a ese formato de salida, pero la ruta New Data Box es algo que no había considerado anteriormente. , y bien podría ser útil en el futuro.
También se me señaló en una comunicación privada que podría necesitar considerar el impacto en mi propia solución si un usuario intentara posteriormente ordenar el cuadro de tabla por una de sus columnas (lo que podría hacer fácilmente con un clic derecho). .En realidad, esto no sería un problema en este caso, ya que el cuadro de tabla es parte de un informe final en el que ordenarlo más no tendría ningún propósito útil, pero el punto está bien entendido.
Finalmente, he notado de pasada que la propiedad "<< establecer función de cambio de fila()" en realidad no trabajar a menos que una o más filas hayan sido seleccionadas explícitamente mediante la propiedad "<< establecer filas seleccionadas()", o se haya incluido una propiedad "<< establecer filas seleccionables(1)" en la lista de configuraciones de propiedades.Es sólo una pequeña cosa, pero me confundió hasta que me di cuenta de que al menos uno de estos era necesario antes de poder hacer lo que estaba tratando de hacer.
Nuevamente muchas gracias a todos.
Re: Sombrear bloques de filas en un Table BoxLa forma en que manejo esto es usar una función New Data Box() y no usar un Table Box(), sino una tabla de datos.Con eso, puedes colorear las celdas, etc. y aprovechar al máximo todas las capacidades de edición de una tabla de datos.
Aquí hay un guión para ilustrar de lo que estoy hablando:
Nombres predeterminados aquí ( 1 ) ;
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" , invisible ) ;
// Selecciona grupos de 3 filas
Para ( k = 1 , k <= 3 , k ++,
Para ( i = k , i <= N filas ( dt ) , i = i + 6 ,
Estado de la fila ( i ) = Estado seleccionado ( 1 )
)
) ;
la lista = Como lista ( dt << obtener filas seleccionadas ) ;
dt << Borrar Seleccionar ;
// recorre todas las columnas y establece los colores de las celdas
colista = dt << obtener nombres de columnas ( "cadena" ) ;
Para ( i = 1 , i <= N artículos ( colista ) , i ++,
evaluar (
Sustituto (
Expr. (
Columna ( dt , colista [ i ] ) << celdas de color ( { "Rojo" , _la lista_ } )
) ,
Expr. ( _la lista_ ) , la lista
)
)
) ;
// Configurar la ventana de visualización
Noroeste = Nueva ventana ( "Mostrar" ,
Cuadro de lista V (
tuberculosis = Caja de texto ( " El ejemplo" ) ,
vlb = Cuadro de lista V ()
)
) ;
ndb = dt << Nuevo cuadro de datos () ;
vlb << adjuntar ( ndb ) ;
ndb << cerrar paneles laterales ( 1 ) ;
tuberculosis << establecer el tamaño de fuente ( 20 ) ;
Produce la siguiente ventana de visualización.

Re: Sombrear bloques de filas en un Table BoxPodría hacer algo como esto.
índice = 1 :: 99 ;
nueva ventana ( "Ventana" , TB = Cuadro de mesa ( NúmeroColBox ( "Columna" , índice)));
norte= 3 ; //Puedes cambiar esto a cualquier número de tu grupo
filas = loc ( modificación ( piso ((índice- 1 )/norte), 2 ) ); //simplemente da grupos alternos de n ráfagas juntas
tuberculosis << Establecer filas seleccionadas (filas);
Espero que esto ayude.Salud.
*Editar* Me acabo de dar cuenta de que esta no es la parte sobre la que probablemente estabas preguntando.Lo siento.
¿Podrías simplemente seleccionar las filas y luego hacerlas no seleccionables?
tb << Establecer filas seleccionables (0);