- 您必須在將數據添加到網格之前對數據進行排序。沒有內置函數可以理解和排序你的數據(據我所知)。如果您使用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。