- Bạn phải đặt hàng dữ liệu của mình trước khi thêm nó vào lưới. Không có sẵn chức năng có thể hiểu và sắp xếp dữ liệu cho bạn (theo như tôi biết). Nếu bạn sử dụng Binary Search Tree, tôi nghĩ bạn có thể sắp xếp theo lá bên trái. Với các cấu trúc cây khác, bạn có thể có quá vòng lặp thông qua dữ liệu hoặc viết một truy vấn SQL đệ quy để sắp xếp nó.
Vì dữ liệu cần phải được sắp xếp, không có cách nào dễ dàng để hỗ trợ phân loại cây. Việc sắp xếp cơ bản sẽ phá hủy dữ liệu có cấu trúc của bạn. Tuy nhiên, nếu bạn có thuộc tính trên dữ liệu sortOrder, bạn sẽ có thể sắp xếp dữ liệu. Nếu bạn có tất cả các nút cấp 1 là sortOrder = 1, nút cấp 2 là sortOrder = 2 và cứ như vậy, trước tiên hãy sắp xếp theo sắp xếp và sau đó theo cột theo thứ tự tăng dần hoặc giảm dần. Kiểm tra Multi column sort để hiểu rõ cách bạn có thể thực hiện việc này.
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;
}
}
}
});
Một số điều cần lưu ý nếu bạn đang cố gắng cột sắp xếp cây:
Nếu bạn nhìn vào dụ 5 bạn có thể thấy rằng cả lọc và định dạng được triển khai để dữ liệu cần được sắp xếp.
Bộ lọc:
//part of the filter.
var parent = dataViewData[item.parent];
while (parent) {
if (parent._collapsed) {
parent._collapsed = false;
}
parent = dataViewData[parent.parent];
}
Và đây là một phần của định dạng:
//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 {
//.......
}
}
Tôi viết lại những sử dụng thực tế id thay vì kiểm tra chống lại thứ tự của các dữ liệu trong dataView. Điều này đòi hỏi bạn quá vòng lặp thông qua tất cả dữ liệu của bạn để xem liệu nút hiện tại có bất kỳ trẻ em nào không. Bạn cũng cần phải thay thế dataViewData [idx] gọi:
//instead of dataViewData[item.parent];
var parent = dataView.getItemById(item.parent);
này sẽ làm cho công việc cây mặc dù các nút không được sắp xếp, nhưng khi mở rộng một nút, những đứa trẻ có thể sẽ kết thúc sau khi một nút khác , nơi họ không cư trú.
Nếu bạn cần triển khai tìm kiếm bộ lọc tiêu đề Tôi đã trả lời một câu hỏi khác here cách đây vài ngày.