- आपको इसे ग्रिड में जोड़ने से पहले अपने डेटा को ऑर्डर करना होगा। ऐसे कार्यों में कोई भी निर्मित नहीं है जो आपके लिए डेटा को समझ और सॉर्ट कर सकें (जहां तक मुझे पता है)। यदि आप Binary Search Tree का उपयोग करते हैं, तो मुझे लगता है कि आप बस बाएं पत्ते द्वारा क्रमबद्ध कर सकते हैं। अन्य वृक्ष संरचनाओं के साथ, आपके पास शायद डेटा के माध्यम से बहुत लूप हो या इसे क्रमबद्ध करने के लिए एक रिकर्सिव एसक्यूएल-क्वेरी लिखें।
चूंकि डेटा को आदेश देने की आवश्यकता है, इसलिए पेड़ को सॉर्ट करने का समर्थन करने का कोई आसान तरीका नहीं है। मूल सॉर्टिंग आपके संरचित डेटा को नष्ट कर देगी। हालांकि, अगर आपके पास सॉर्टऑर्डर पर कोई संपत्ति है, तो आप डेटा को सॉर्ट करने में सक्षम होना चाहिए। यदि आपके पास सॉर्टऑर्डर = 1 के रूप में सभी स्तर 1 नोड्स हैं, सॉर्टऑर्डर = 2 के रूप में स्तर 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 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 {
//.......
}
}
मैं इन वास्तविक आईडी का उपयोग करने के बजाय में डेटा के आदेश के खिलाफ जाँच दुबारा लिखा:
//part of the filter.
var parent = dataViewData[item.parent];
while (parent) {
if (parent._collapsed) {
parent._collapsed = false;
}
parent = dataViewData[parent.parent];
}
और यहाँ फ़ॉर्मेटर का एक हिस्सा है डेटा देखें। यह देखने के लिए कि आपके वर्तमान नोड में कोई बच्चा है या नहीं, यह आपको अपने सभी डेटा के माध्यम से बहुत लूप की आवश्यकता है। तुम भी dataViewData प्रतिस्थापित करने की आवश्यकता [IDX] कॉल:
//instead of dataViewData[item.parent];
var parent = dataView.getItemById(item.parent);
यह भले ही नोड्स पृथक नहीं किया जा वृक्ष काम कर देगा, लेकिन जब एक नोड का विस्तार, बच्चों शायद एक और नोड के बाद खत्म हो जाएगा , जहां वे रहते हैं।
यदि आपको हेडर फ़िल्टर खोज लागू करने की आवश्यकता है तो मैंने कुछ दिन पहले here पर एक और प्रश्न का जवाब दिया था।