2011-01-21 9 views
7

मेरे पास एक एएसपी.नेट एमवीसी 3 पृष्ठ नहीं है। उस पर, मेरे पास एक टेबल है जो मैं AJAX कॉल से JSON डेटा का उपयोग कर jqGrid में बदल जाता हूं। ग्रिड में निम्न सेटअप है:jqGrid फ़िल्टर या तिथि से खोज क्लाइंट पक्ष

myGrid = $('#myGrid'); 
myGrid.jqGrid({ 
    caption: 'My Grid', 
    datatype: 'local', 
    data: data.rows, 
    height: 250, 
    pager: '#myPager', 
    viewrecords: true, 
    colModel: [ 
     ..., 
     { 
      label: 'blah', 
      name: 'blah', 
      align: 'left', 
      sortable: true, 
      editable: false, 
      width: 85, 
      formatter: 'date', 
      sorttype: 'date', 
      datefmt: 'm/d/Y', 
      formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' } 
     }, 
     ... 
    ] 
}); 

// turn on filter toolbar 
myGrid.filterToolbar(); 

डेटा.रो AJAX कॉल से वापस आ गया है। यह एक को छोड़कर सभी तरीकों से काम करता है। मैं क्लाइंट-साइड को क्रमबद्ध कर सकता हूं, क्लाइंट साइड को सॉर्ट कर सकता हूं, और प्रत्येक फ़ील्ड द्वारा खोज कर सकता हूं, जिसे मैं colModel दिखाता हूं। यह 'blah' फ़ील्ड एक दिनांक फ़ील्ड है, और यह मिमी/डीडी/yyyy प्रारूप में, तारीखों को सही ढंग से प्रदर्शित करता है। हालांकि, जब मैं टूलबार में 11/17/2010 की तरह कुछ टाइप करता हूं और एंटर दबाता हूं, तो खोज 0 रिकॉर्ड लौटाती है।

तो मैं jqGrid कोड में गहरी खोदा, और यहाँ यह क्या उत्पन्न करता है इससे पहले कि यह खोज करता है:

{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]} 

आखिरकार, जब यह प्रत्येक पंक्ति के माध्यम से चला जाता है और यह मैदान पर eval आपरेशन मूल्यांकन करता है, (एम

(String(this.blah).substr(0,10) == String("11/17/2010")) 

मूल रूप से की तरह में पहचान नहीं कर रहा है कि क्षेत्र एक तारीख है यह मेरे लिए लग रहा है,:) & & p.push (यह) लाइन, मी यह है। यह पार्सडेट की बजाय पार्स कहता है। किसी के पास कोई विचार है कि इसे कैसे ठीक किया जाए? मुझे पता है कि सर्वर की तरफ खोजना आसान है, मैं बस उस स्ट्रिंग को पास कर सकता हूं, इसे पार्स कर सकता हूं, और बैम। लेकिन अगर मैं कर सकता हूं तो मैं क्लाइंट साइड रहना चाहता हूं। मैं ओलेग और टॉम के कुछ नमूनों में इसे डुप्लिकेट करने में सक्षम था, इसलिए यह या तो एक मुद्दा है या मुझे कॉन्फ़िगरेशन में कुछ याद आ रहा है ...

+0

जिस तरह से jqGrid आपके लिए AJAX कॉल कर सकता है, इसलिए 'data.rows' के उपयोग की आवश्यकता नहीं होगी। Http://stackoverflow.com/questions/2835957/jquery-with-asp-net-mvc-calling-ajax-enabled-web-service/2836817#2836817, http://stackoverflow.com/questions/ से कुछ लिंक देखें 4169384/कैसे-कैन-आई-बाइंड-माय-व्यू-मॉडल-टू-ए-जेकग्रीड/4169848 # 4169848 और http://www.trirand.com/blog/?page_id = 393/सुविधा अनुरोध/बाकी समर्थन/# p21762। मैं लिंक के साथ जारी रख सकता हूं ... – Oleg

+0

असल में, मुझे अपने AJAX कॉल के अंदर ग्रिड के निर्माण को लपेटना पड़ा। इसका कारण यह है कि मुझे GridUnload() को कॉल करना है क्योंकि मैं फ़िल्टर टूलबार में अपने ड्रॉप डाउन फ़िल्टर को गतिशील रूप से अपडेट कर रहा हूं। मैंने प्रलेखन को देखा और ट्रिगर ('रीलोड टूलबार') जैसे कुछ नहीं मिला। – Milimetric

उत्तर

3

मुझे आपका प्रश्न दिलचस्प लगता है तो मुझे +1 से आपका प्रश्न। क्योंकि आप स्थानीय खोज के दौरान लाइन

(String(this.blah).substr(0,10) == String("11/17/2010")) 

eval में इस्तेमाल तैनात मैं तुम्हें समझने के लिए स्थानीय खोज कार्यान्वित कर रहे हैं अधिक समय खर्च लगता है। क्योंकि आप देखते हैं कि ऊपर की रेखा ((String(this.blah).substr(0,10) ... देखें) क्या नहीं किया जाना चाहिए (String(this.blah) का मान "11/17/2010" के बजाय "2010-11-17" होगा), आप jqGrid के संबंधित फ़ंक्शन को ओवरराइट कर सकते हैं (फंक्शन _getStr$.jgrid.from के अंदर) और समस्या को ठीक से ठीक करें।

कुछ समय पहले मैं संबंधित the demo तैयार करने के लिए अधिक समय बिताता हूं, जो इस तकनीक को प्रदर्शित करता है। डेमो को the answer in trirand forum के रूप में तैयार किया गया था। प्रश्न में 'benevise' की खोज के मामले में 'bénevise' जैसे तार ढूंढना चाहता था। तो किसी को वास्तव में कस्टम स्थानीय खोज को लागू करना होगा। मुझे आशा है कि आपके द्वारा वर्णित समस्या को ठीक करने के लिए जानकारी पर्याप्त होगी।

अद्यतन: ऐसा लगता है कि मुझे एक और अधिक सरल काम मिल गया है। आपको डेटा रखने वाले 'blah' कॉलम के लिए searchoptions: {sopt: ['eq','ne']} को परिभाषित करना चाहिए। फिर "bw" (साथ शुरू) कॉलम के लिए उपयोग नहीं किया जाएगा। स्थानीय खोज में "बराबर" और "बराबर नहीं" संचालन सही ढंग से काम करते हैं।

अपडेट 2: Here काम कर उदाहरण है जहाँ मैं sopt विकल्प का उपयोग है।

+0

ठीक है, मैंने उदाहरण के माध्यम से काम किया और यह काम करता है अगर मैं अपना स्रोत डेटा बदलता हूं। मैंने देखा है कि आपके द्वारा उपयोग किए जा रहे डेटा में "2007-09-01" जैसी परिभाषाएं हैं। मेरे डेटा में था: नई तिथि ("2007-09-01")। मेरा स्रोत डेटा एएसपी.नेट एमवीसी से आ रहा है, और मुझे JSON.parse को माइक्रोसॉफ्ट के दिनांक प्रारूप की सही व्याख्या करने के लिए ओवरराइड करना था:/^ \/Date \\ ((\ d +) \\) \/$/ तो यह ग्रिड के साथ कोई समस्या नहीं है, लेकिन डेट ऑब्जेक्ट्स में पास करने में सक्षम होना अच्छा होगा। मुझे लगता है कि केवल एक ही बदलाव की आवश्यकता है parseDate फ़ंक्शन में, जोड़ें: यदि (Object.prototype.toString.call (e) === '[ऑब्जेक्ट दिनांक]') {वापसी ई; } धन्यवाद ओलेग! – Milimetric

संबंधित मुद्दे