Bloques de sombreado de filas en un cuadro de tabla<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Tengo un Table Box que contiene una gran cantidad de filas que se agrupan naturalmente en bloques de tres filas cada una (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 , y así).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 para sombrear tres filas a la vez significa que no puedo simplemente usar la propiedad "<< sombrear filas alternativas").
Puedo preseleccionar cada bloque alternativo de tres filas con la propiedad "<< establecer filas seleccionadas()", pero ese patrón de colores se perdería si el usuario hiciera clic posteriormente en cualquiera de las filas o las seleccionara o deseleccionara. .Por lo tanto, apliqué la misma propiedad dentro de la propiedad "<< establecer la función de cambio de fila", por lo que si el usuario hace clic en cualquier parte de la tabla, el sombreado se vuelve a aplicar de inmediato.Termino con algo como esto:
listanombres = 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),
Número Col Box ("Primero", índice (1, 24)),
Número Col Box("Segundo", index(25, 48)),
Número Col Box("Tercero", index(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 las filas seleccionadas (tresLista)),
<< 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 manera más fácil de hacerlo?
Muchas gracias.
Re: Sombrear bloques de filas en un cuadro de tablaSolo 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 se bifurcará a una función, en la que puede 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 cuadro de tablaGracias a todos, ha sido extremadamente útil en general, y voy a 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 la tabla con la selección requerida, desafortunadamente, sin embargo, parece que hacer esto realmente 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 las combinaciones de construcciones eval(), replace() y expr(), ¡y tener ejemplos de trabajo para adaptar hace la vida mucho más fácil!De hecho, me quedaré con mi cuadro de tabla 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 del nuevo cuadro de datos es algo que no había considerado anteriormente. , y bien podría ser útil en el futuro.
También me han señalado en una comunicación privada que es posible que deba considerar el impacto en mi propia solución de un usuario que posteriormente intente 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 clasificarlo más no tendría ningún propósito útil, pero el punto está bien entendido.
Finalmente, he notado de paso que la propiedad "<< establecer la función de cambio de fila ()" en realidad no trabajar a menos que una o más filas hayan sido seleccionadas explícitamente por la propiedad "<< establecer filas seleccionadas ()", o se haya incluido una propiedad "<< establecer filas seleccionables (1)" en la lista de configuraciones de propiedades.Es solo 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.
De nuevo, muchas gracias a todos.
Re: Sombrear bloques de filas en un cuadro de tablaLa forma en que manejo esto es usar una función New Data Box() y no usar Table Box(), sino una tabla de datos.Con eso, puede 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 lo que estoy hablando:
Nombres predeterminados hasta aquí ( 1 ) ;
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" , invisible ) ;
// Seleccionar grupos de 3 filas
Para ( k = 1 , k <= 3 , k ++,
Para ( i = k , i <= n filas ( dt ) , i = i + 6 ,
Estado de 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 columna ( "cuerda" ) ;
Para ( i = 1 , i <= N elementos ( colista ) , i ++,
evaluar (
Sustituto (
exp. (
Columna ( dt , colista [ i ] ) << celdas de color ( { "Rojo" , _la lista_ } )
) ,
exp. ( _la lista_ ) , la lista
)
)
) ;
// Configurar la ventana de visualización
Noroeste = Nueva ventana ( "Monitor" ,
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 los paneles laterales ( 1 ) ;
tuberculosis << establecer tamaño de fuente ( 20 ) ;
Produce la siguiente ventana de visualización

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