- 您必须在将数据添加到网格之前对数据进行排序。没有内置函数可以理解和排序你的数据(据我所知)。如果您使用Binary Search Tree,我认为您可以按左叶排序。对于其他树结构,您可能会循环遍历数据或编写递归SQL查询来对其进行排序。
由于数据需要排序,所以没有简单的方法来支持树的排序。基本的排序会破坏你的结构化数据。但是,如果您对数据sortOrder有财产,则应该可以对数据进行排序。如果你拥有所有一级节点作为中将sortOrder = 1,二级节点作为中将sortOrder = 2等,通过排序顺序,然后在升序或降序排列列第一排序。请检查Multi column sort以了解如何执行此操作。
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;
}
}
}
});
有些事情要考虑,如果你想尝试列排序树:
如果你看看例如5,你可以看到,无论是过滤和格式化程序被实现以便数据需要被排序。
过滤器:
//part of the filter.
var parent = dataViewData[item.parent];
while (parent) {
if (parent._collapsed) {
parent._collapsed = false;
}
parent = dataViewData[parent.parent];
}
而这里的格式化的一部分:
//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 {
//.......
}
}
我重写这些使用实际ID,而不是检查,对在该数据的顺序dataView。这需要您循环遍历所有数据,以查看当前节点是否有子节点。您还需要更换dataViewData [IDX]电话:
//instead of dataViewData[item.parent];
var parent = dataView.getItemById(item.parent);
这将使树工作,即使节点不排序,而是扩展一个节点时,孩子可能会另一个节点后结束,他们不居住。
如果您需要实施标题筛选器搜索我在几天前回复了另一个问题here。