दिलचस्प पोस्ट
क्या PHP फ़ंक्शन केस संवेदनशील है? WPF छवि लोड async करें ईमेल में चित्रों को कैसे एम्बेड करें गीत में हेड और ओआरआईजी_एचईएडी AJAX – WooCommerce एपीआई का उपयोग कर गाड़ी में एक बदलाव जोड़ें? विजुअल स्टूडियो 2010 और VB.NET में वैश्विक चर की घोषणा करें बंडल निर्माण के बाद Symfony3 ClassNotFound अपवाद कॉलम संख्या को अक्षर में कनवर्ट करने के लिए फ़ंक्शन? .NET मेमोरी प्रोफाइलिंग उपकरण व्यवहार विषय बनाम अवलोकन योग्य? क्यों जावास्क्रिप्ट में बहसें। Calere.caller संपत्ति नापसंद थी? निर्माण का निर्माण क्या होता है? क्या मेरे एनजी-मॉडल को वास्तव में बाल $ दायित्वों की समस्या से बचने के लिए एक डॉट की आवश्यकता है? जावास्क्रिप्ट / jQuery के साथ एक HTML तत्व से सभी गुण प्राप्त करें एनपीएम स्क्रिप्ट के लिए कमांड लाइन तर्क भेजना

JqGrid स्तंभ हेडर फिल्टर और उन्नत फ़िल्टरिंग संवाद पर दो संबंधित प्रश्न

कुछ डेटा प्रदर्शित करने के लिए jqGrid का उपयोग करके मेरी पहली एएसपी.नेट एमवीसी 3 ऐप्लीकेशन को विकसित करने में, मैं कॉलम हेडर फिल्टर का उपयोग कर रहा हूं और उन्नत फ़िल्टर टूलबार फ़िल्टर करने की अनुमति भी देता हूं। स्वतंत्र रूप से ये चीजें बहुत अच्छी तरह से काम करती हैं

पहला प्रश्न – क्या मौजूदा कॉलम हेडर फिल्टर सेटिंग को उन्नत फ़िल्टर में संचार करने के लिए कोई भी समाधान है?

एक उदाहरण के रूप में, एक उपयोगकर्ता "आइस क्रीम नाम" कॉलम पर फ़िल्टर कर सकता है, जिसमें आंशिक नाम दर्ज किया जाता है, जैसे "चॉकलेट", और यह "चॉकलेट विस्फोट", "डार्क चॉकलेट" आदि के लिए फ़िल्टर कर देगा। उन्नत फ़िल्टर को खोलने के लिए क्या अच्छा होगा और यह है कि उन्नत फ़िल्टर में स्वचालित रूप से आबादी वाले "चॉकलेट 'कॉलम फ़िल्टर शामिल है मैं समझता हूं कि दूसरी दिशा (जहां एक ही कॉलम के लिए कोई और और या दो मान, जैसे 'चॉकलेट' या 'कारमेल') समस्याग्रस्त हो जाता है, लेकिन दूसरी दिशा में, ऐसा लगता है कि यह संभव हो सकता है। शायद यह केवल ग्रिड की एक सेटिंग है जो मैं याद कर रहा हूं। किसी ने इसे हल किया?

दूसरा सवाल – मैं वर्तमान में कॉलम हैडर फिल्टर के साथ कुछ फ़िल्टरिंग कर सकता हूं, कुछ परिणाम ग्रिड में सेट कर दिखाता हूं और फिर उन्नत फ़िल्टर संवाद में जाकर एक अलग फ़िल्टर सेट कर सकता है यह सही परिणाम दिखाएगा लेकिन कॉलम हैडर फ़िल्टर साफ़ नहीं किए जा सकते हैं, जिससे यह धारणा है कि फ़िल्टरिंग काम नहीं कर रही है। उपयोग किए जाने के बाद संवाद पर "ढूंढें" बटन क्लिक करने पर मैं उन कॉलम हेडर फिल्टर को कैसे रीसेट कर सकता हूँ?

वेब के समाधान से एकत्रित समाधान "JqGrid स्तंभ हेडर फिल्टर और उन्नत फ़िल्टरिंग संवाद पर दो संबंधित प्रश्न"

मुझे आपका प्रश्न बहुत ही दिलचस्प लगता है, इसलिए मैंने डेमो तैयार किया जो प्रदर्शित करता है कि एक उन्नत खोज संवाद और टूलबार एक ग्रिड में कैसे खोज सकता है।

एक महत्वपूर्ण, लेकिन साधारण चाल recreateFilter: true का उपयोग है recreateFilter: true । डिफ़ॉल्ट रूप से खोज संवाद एक बार बनाया जाएगा और फिर केवल छिपाया जाएगा या दिखाया जाएगा। परिणामस्वरूप postData.filters पैरामीटर रिफ्रेश नहीं किया जाएगा। recreateFilter: true करने के बाद recreateFilter: true खोज टूलबार से मानों के साथ उन्नत खोज संवाद को भरने में समस्या हल हो जाएगी। मैं व्यक्तिगत रूप से निम्नलिखित के रूप में डिफ़ॉल्ट खोज विकल्प सेट करता हूं I

 $.extend( $.jgrid.search, { multipleSearch: true, multipleGroup: true, recreateFilter: true, overlay: 0 } ); 

अब समाधान के अधिक जटिल भाग में फ़ंक्शन refreshSerchingToolbar जिसे मैंने लिखा था। फ़ंक्शन इतना सरल नहीं है, लेकिन यह केवल उपयोग में है:

 loadComplete: function () { refreshSerchingToolbar($(this), 'cn'); } 

आखिरी पैरामीटर एक ही पैरामीटर है जिसे आपने खोज टूलबार विधि की डिफ़ॉल्ट defaultSearch प्रॉपर्टी के रूप में उपयोग किया है filterToolbar (डिफ़ॉल्ट मान ' filterToolbar ' है, लेकिन मैं व्यक्तिगत रूप से 'cn' का उपयोग करना पसंद करता हूं और jqGrid पैरामीटर को ignoreCase: true )।

यदि आप निम्न फ़ील्ड के साथ डेमो के उन्नत खोज संवाद को भरते हैं

यहां छवि विवरण दर्ज करें

और "ढूंढें" बटन पर क्लिक करें, आपके पास निम्नलिखित ग्रिड होंगे:

यहां छवि विवरण दर्ज करें

(मैंने search: false संबंध में 'कुल' कॉलम को गैर-खोजे जाने के रूप में चिह्नित किया है search: false को केवल दिखाने के लिए कि मामले में सही तरीके से काम करता है)

कोई भी देख सकता है कि "मात्रा" को छोड़कर खोज उपकरण पट्टी के सभी फ़ील्ड खोज संवाद से मानों से भरे हुए हैं। फ़ील्ड भरे नहीं है क्योंकि हम "बराबर" के बजाय "छील या समान" संचालन का इस्तेमाल करते हैं। फंक्शन refreshSerchingToolbar टूलबार केवल खोज टूलबार के तत्वों को भरता है जो कि द्वारा उत्पादित किया जा सकता है

एक अनुस्मारक के रूप में मुझे यह उल्लेख करना चाहिए कि फ़िल्टर टूलबार के उपयोग के मामले में, कर्नलमॉडल के खोज विकल्पों को परिभाषित करना बहुत महत्वपूर्ण है। सभी गैर-स्ट्रिंग कॉलम में (तिथियां, संख्याएं, चयन, इंट, मुद्रा) के लिए sopt सरणी के पहले तत्व के रूप में 'eq' होना अत्यंत महत्वपूर्ण है । विवरण के लिए यहां और यहां देखें

यदि आप निम्न के लिए उन्नत संवाद का फिल्टर बदलते हैं

यहां छवि विवरण दर्ज करें

आप के रूप में अपेक्षित होगा

यहां छवि विवरण दर्ज करें

अंत में मैं refreshSerchingToolbar फ़ंक्शन का कोड शामिल करता हूं:

 var getColumnIndex = function (grid, columnIndex) { var cm = grid.jqGrid('getGridParam', 'colModel'), i = 0, l = cm.length; for (; i < l; i += 1) { if ((cm[i].index || cm[i].name) === columnIndex) { return i; // return the colModel index } } return -1; }, refreshSerchingToolbar = function ($grid, myDefaultSearch) { var postData = $grid.jqGrid('getGridParam', 'postData'), filters, i, l, rules, rule, iCol, cm = $grid.jqGrid('getGridParam', 'colModel'), cmi, control, tagName; for (i = 0, l = cm.length; i < l; i += 1) { control = $("#gs_" + $.jgrid.jqID(cm[i].name)); if (control.length > 0) { tagName = control[0].tagName.toUpperCase(); if (tagName === "SELECT") { // && cmi.stype === "select" control.find("option[value='']") .attr('selected', 'selected'); } else if (tagName === "INPUT") { control.val(''); } } } if (typeof (postData.filters) === "string" && typeof ($grid[0].ftoolbar) === "boolean" && $grid[0].ftoolbar) { filters = $.parseJSON(postData.filters); if (filters && filters.groupOp === "AND" && typeof (filters.groups) === "undefined") { // only in case of advance searching without grouping we import filters in the // searching toolbar rules = filters.rules; for (i = 0, l = rules.length; i < l; i += 1) { rule = rules[i]; iCol = getColumnIndex($grid, rule.field); cmi = cm[iCol]; control = $("#gs_" + $.jgrid.jqID(cmi.name)); if (iCol >= 0 && control.length > 0) { tagName = control[0].tagName.toUpperCase(); if (((typeof (cmi.searchoptions) === "undefined" || typeof (cmi.searchoptions.sopt) === "undefined") && rule.op === myDefaultSearch) || (typeof (cmi.searchoptions) === "object" && $.isArray(cmi.searchoptions.sopt) && cmi.searchoptions.sopt[0] === rule.op)) { if (tagName === "SELECT") { // && cmi.stype === "select" control.find("option[value='" + $.jgrid.jqID(rule.data) + "']") .attr('selected', 'selected'); } else if (tagName === "INPUT") { control.val(rule.data); } } } } } } }; 

नवीनीकृत : उपयोग के मुताबिक मुफ्त के मामले में उपरोक्त कोड की आवश्यकता नहीं है। JqGrid 4.13.1 या अधिक। इसमें नया डिफ़ॉल्ट विकल्प loadFilterDefaults: true , जो कि फिल्टर टूलबार के मूल्यों को रिफ्रेश करती है और फ़िल्टर ऑपरेशन (यदि searchOperators: true विकल्प है तो) अगर postData.filters और search: true सेट हो गए हैं (फिल्टर है आवेदन किया है)। नि: शुल्क jqGrid jqGridAfterLoadComplete पर फिल्टर टूलबार को jqGridAfterLoadComplete (अगर loadFilterDefaults: true सेट होते हैं) या यदि इवेंट jqGridRefreshFilterValues स्पष्ट रूप से ट्रिगर किया गया है।

मुझे पता है कि यह एक पुरानी पोस्ट है – लेकिन अगर आपके पास एक ही पृष्ठ पर कई ग्रिड हैं, तो ऊपर कोड गलत पाठ को फ़िल्टर कर सकता है।

इसे ताज़ा करने में पहले लूप में परिवर्तित करना

 control = $("#gs_" + $.jgrid.jqID(cm[i].name)); 

सेवा मेरे

 control = $("#gview_"+$grid.attr('id')+" #gs_" + $.jgrid.jqID(cm[i].name)); 

और यह दूसरे लूप में से है

 control = $("#gs_" + $.jgrid.jqID(cmi.name)); 

सेवा मेरे

 control = $("#gview_"+$grid.attr('id')+" #gs_" + $.jgrid.jqID(cmi.name)); 

चाल करना चाहिए

ओल्ड के लिए यश