Soy relativamente nuevo en dojo y he visto cómo datagrid ofrece una capacidad de filtrado dinámico que reduce las filas visibles según lo que escribe en una entrada de texto de filtro. No he encontrado ningún ejemplo de cómo hacerlo con dgrid. Si se puede hacer, proporcione un ejemplo o apúnteme a un recurso que ofrezca un tutorial o un ejemplo. ¡Gracias!¿Es posible filtrar datos en una cuadrícula como se puede en una cuadrícula de datos? ¿Si es así, cómo?
Respuesta
Sí, es posible. Utilice dgrid/OnDemandGrid
y defina la función query
que devolverá true
o false
en función de su lógica para cada fila en dojo/store
que alimenta la red.
I preparado un ejemplo para jugar con en jsFiddle: http://jsfiddle.net/phusick/7gnFd/, por lo que no tiene que explicar demasiado:
la función de consulta:
var filterQuery = function(item, index, items) {
var filterString = filter ? filter.get("value") + "" : "";
// early exists
if (filterString.length < 2) return true;
if (!item.Name) return false;
// compare
var name = (item.Name + "").toLowerCase();
if (~name.indexOf(filterString.toLowerCase())) { return true;}
return false;
};
La cuadrícula :
var grid = new Grid({
store: store,
query: filterQuery, // <== the query function for filtering
columns: {
Name: "Name",
Year: "Year",
Artist: "Artist",
Album: "Album",
Genre: "Genre"
}
}, "grid");
Sé que esta no es la respuesta a la pregunta, y la respuesta proporcionada es magistral y la usamos bastante.
Sin embargo, esta funcionalidad no parece funcionar bien si está utilizando un TreeGrid (columnas con el complemento "dgrid/tree"). He escrito un código para simular el mismo comportamiento que la respuesta aceptada con una cuadrícula de árbol. Básicamente se trata de recorrer los elementos de la tienda y ocultar todos los elementos de la fila que no coincidan con la condición que establezcas. Pensé que podría compartirlo en caso de que ayude a alguien. Es bastante feo y estoy seguro de que se puede mejorar, pero funciona.
Básicamente utiliza el mismo concepto que la respuesta de phusick. Es necesario tener cuidado un valor en un cuadro de texto, pero en lugar de la actualización de la rejilla tiene que llamar a una función:
textBox.watch("value", lang.hitch(this, function() {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
};
timeoutId = setTimeout(lang.hitch(this, function() {
this.filterGridByName(textBox.get('value'), myGrid);
}, 300));
}));
y aquí está la función:
filterGridByName: function(name, grid){
try {
for (var j in grid.store.data){
var dataItem = grid.store.data[j];
var childrenLength = dataItem.children.length;
var childrenHiddenCount = 0;
var parentRow = grid.row(dataItem.id);
for (var k in dataItem.children){
var row = grid.row(dataItem.children[k].id);
var found = false;
if (dataItem.children[k].name.toLowerCase().indexOf(name.toLowerCase()) != -1){
found = true;
}
if (found){
if (row.element){
domStyle.set(row.element, "display", "block");
}
if (parentRow.element){
domStyle.set(parentRow.element, "display", "block");
}
} else {
childrenHiddenCount++;
// programmatically uncheck any hidden item so hidden items
for (var m in grid.dirty){
if (m === dataItem.children[k].id && grid.dirty[m].selected){
grid.dirty[m].selected = false;
}
}
if (row.element){
domStyle.set(row.element, "display", "none");
}
}
}
// if all of the children were hidden, hide the parent too
if (childrenLength === childrenHiddenCount){
domStyle.set(parentRow.element, "display", "none");
}
}
} catch (err){
console.info("error: ", err);
}
}
- 1. Ingresar datos en una cuadrícula
- 2. ¿Es posible cambiar filas y columnas en una vista de cuadrícula de datos?
- 3. ¿Es posible mostrar un mensaje en una cuadrícula de datos vacía?
- 4. ¿Cómo borrar una cuadrícula de datos ASP.NET?
- 5. ¿Es posible SÓLO seleccionar una fila en la cuadrícula de datos?
- 6. ¿Es posible vincular propiedades de tipo complejo a una cuadrícula de datos?
- 7. Enlace a un comando en una cuadrícula de datos
- 8. Programmatically Para verificar dll existe en Gac o no. Si es así, mostrarlo en la cuadrícula
- 9. ¿Cómo establecer el foco en una fila en particular en una cuadrícula de datos/vista de cuadrícula?
- 10. Alineación de texto en una cuadrícula de datos WPF
- 11. Cómo filtrar múltiples columnas de cuadrícula extjs?
- 12. cómo ordenar una cuadrícula de datos flexible según múltiples columnas?
- 13. ¿Qué es una buena cuadrícula basada en web que acepta datos del Portapapeles de Excel?
- 14. ¿Cómo se estilo condicionalmente una celda en una cuadrícula de datos de Dojo?
- 15. ¿Es posible marcar una propiedad que se muestra en una cuadrícula de propiedades como un campo de contraseña
- 16. ¿Complemento para agregar paginación en una cuadrícula de datos Flex?
- 17. En XAML puro, ¿es posible obtener una línea para alinearla a una parte de una cuadrícula?
- 18. Desactivar tabstop entre columnas en una cuadrícula de datos WPF
- 19. unión entre cuadrícula de datos y una serie
- 20. Cuadrícula de datos editable en WPF
- 21. Unión de cuadrícula de datos en WPF
- 22. Obtener filas de la cuadrícula de datos
- 23. ¿Es posible dividir una cadena en varias líneas en un archivo XML? ¿Si es así, cómo?
- 24. Cómo obtener elementos ordenados desde una cuadrícula de datos
- 25. ¿Se pueden definir datos estáticos para filas de cuadrícula de datos puramente en XAML, es decir, sin código subyacente?
- 26. Cómo actualizar la cuadrícula de datos
- 27. ¿Se puede usar REST en PHP? ¿Si es así, cómo?
- 28. Creando una cuadrícula en Java
- 29. Cómo cambiar la fuente de datos en una cuadrícula de datos YUI después de la creación
- 30. colección personalizada se estrella en la cuadrícula de datos Editar
Gracias phusick! ¡Muy útil! ¿Puede explicar la línea: if (~ name.indexOf (filterString.toLowerCase())) {return true;} – teaman
También es curioso acerca de por qué agrega "" en el final de filterString. ¿Es eso para convertirlo en una cadena? – teaman
Sí, para hacer una cadena ya que necesitaba 'length' y' toLowerCase() '. El operador _tilde_ o bitewise NOT es más corto y en algunos navegadores [más rápidos] (http://jsperf.com/indexof-and-tilde/2) que 'name.indexOf (filterString.toLowerCase())> -1'. Ver [El gran misterio de la tilde (~)] (http://www.joezimjs.com/javascript/great-mystery-of-the-tilde/). – phusick