2011-02-01 10 views
5

Tengo una tabla que muestra el resultado de una base de datos, esto a menudo puede ser de hasta 10.000 filas o más. Estoy buscando implementar una función de "búsqueda rápida" que permita al usuario desplazarse fácilmente a una fila con el valor para el que busca."Búsqueda rápida" para una tabla SWT

La idea es que esto sea muy similar a la búsqueda rápida de Chrome o Firefox. Por lo tanto:

  1. accesos de usuario 'CTRL + F'
  2. Una caja surge:
  3. quick find example
  4. El usuario puede entonces pasa rápidamente a través de la mesa de empujar/o/\ a cada valor coincidente

Mi pregunta es, ¿esa tabla ya existe? He visto NatTable y XViewer, pero ambos parecen ser grandes adiciones para un cambio relativamente menor.

Otra biblioteca que he visto que está cerca de encajar en la lista es Lucene TableSearcher. Desafortunadamente, está diseñada para filtrar en lugar de resaltar. Sin embargo, puede ser una avenida que vale la pena investigar.

Respuesta

1

La solución que elegí no fue tan simple como esperaba, pero tiene un rendimiento satisfactorio.

Las tablas involucradas son tablas virtuales que pueden ser muy grandes. Entonces, además de esto al cargar el conjunto de datos, comenzamos un hilo para construir un índice en forma de lista. Debido a que estas tablas pueden ser muy grandes (pero no lo son a menudo), establecemos un límite de 50 mb para esta lista y dejamos de indexarla cuando la pulsamos. Para la mayoría de los casos, esto es perfectamente aceptable, pero para las tablas más grandes significa que, aunque puede ser más lento, es considerablemente más estable que otras opciones.

La 'búsqueda' es un cuadro de texto SWT simple con ModifyListener que itera sobre la lista, realizando un 'contiene' en cada entrada. En una coincidencia, la fila y la columna se calculan a partir del número de índice (0 = 0,0, 1 = 0,1 ..).

Habría sido bueno tener una solución sencilla para esto pero todas las tablas que se ofrecen tienen demasiadas características.

2

No es exactamente lo mismo, pero JFace tiene soporte para filtrar vistas. Escribe en un cuadro de texto y ver contenido reducir a lo que coincide con el filtro. Básicamente es otra forma de presentar funcionalidad de búsqueda/búsqueda al usuario.

Puede ver esto en acción en Preferencias de Eclipse (el campo de texto de filtro sobre el árbol de navegación en el cuadro de diálogo). Ver la clase org.eclipse.ui.dialogs.FilteredTree. No creo que haya una FilteredTable o equivalente, pero las instalaciones subyacentes son bastante genéricas, por lo que no debería costar mucho trabajo juntarlas. Echa un vistazo a la fuente de FilteredTree e ir desde allí.

+0

Gracias, ya existe un filtro para esta tabla (utiliza consultas de base para hacer el filtrado). La idea es que la búsqueda complemente el filtro al permitir a los usuarios revisar los datos filtrados. –

0

cuadro de diálogo Uso FilteredItemsSelectionDialog

+0

¿Dónde encontrarlo? ¿Es parte de SWT o JFace? – Mot

Cuestiones relacionadas