- Tiene que pedir sus datos antes de agregarlos a la red. No hay funciones integradas que puedan entender y ordenar los datos por usted (hasta donde yo sé). Si usa un Binary Search Tree, creo que puede ordenar por hoja de la izquierda. Con otras estructuras de árbol, es probable que haya recorrido demasiado los datos o escriba una consulta SQL recursiva para ordenarla.
Dado que los datos deben pedirse, no hay una manera fácil de admitir la ordenación del árbol. La clasificación básica destruirá tus datos estructurados. Sin embargo, si tiene una propiedad en los datos sortOrder, debería poder ordenar los datos. Si usted tiene todos los nodos de nivel 1 como sortOrder = 1, nivel 2 nodos como sortOrder = 2 y así sucesivamente, primero ordenar por SortOrder y luego por la columna de en orden ascendente o descendente. Consulte Multi column sort para obtener una buena idea de cómo puede hacer esto.
grid.onSort.subscribe(function (e, args) {
var cols = args.sortCols;
data.sort(function (dataRow1, dataRow2) {
//first sort by your parameter, then combine it with example sort:
var sortOrderResult = (dataRow1["sortOrder"] == dataRow2["sortOrder"] ? 0
: (dataRow1["sortOrder"] > dataRow2["sortOrder"] ? 1 : -1));
if(sortOrderResult != 0)
return sortOrderResult;
else {
var field = cols[i].sortCol.field;
var sign = cols[i].sortAsc ? 1 : -1;
var value1 = dataRow1[field], value2 = dataRow2[field];
var result = (value1 == value2 ? 0 : (value1 > value2 ? 1 : -1)) * sign;
if (result != 0) {
return result;
}
}
}
});
Algunas cosas a tener en cuenta si se va a tratar columna de ordenación del árbol:
Si nos fijamos en ejemplo 5 se puede ver que tanto el filtro y la formateador se implementan para que los datos se deben ordenar.
El filtro:
//part of the filter.
var parent = dataViewData[item.parent];
while (parent) {
if (parent._collapsed) {
parent._collapsed = false;
}
parent = dataViewData[parent.parent];
}
Y aquí es una parte del formateador:
//part of the formatter for showing collapse/open nodes
if (dataViewData[idx + 1] && dataViewData[idx + 1].indent > dataViewData[idx].indent) {
if (dataContext._collapsed) {
return spacer + " <span class='toggle expand'></span> " + value;
} else {
//.......
}
}
Reescribí éstos a utilizar el actual Identificación en vez de comprobar en contra de la orden de los datos en el dataView. Esto también requiere que revises todos tus datos para ver si el nodo actual tiene hijos. También es necesario reemplazar el dataViewData [IDX] llama:
//instead of dataViewData[item.parent];
var parent = dataView.getItemById(item.parent);
Esto hará que el trabajo del árbol a pesar de que los nodos no están ordenados, pero cuando se expande un nodo, los niños probablemente terminará tras otro nodo donde no residen
Si necesita implementar búsqueda del filtro de encabezado He respondido a otra pregunta here hace unos días.