2011-10-24 11 views
5

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

मेरी समस्या यह है कि, जब मैं सबमिट बटन पर क्लिक करता हूं, तो मैं ड्रॉपडाउन और डेटा को रीफ्रेश करना चाहता हूं जो पहले ही ड्रॉपडाउन सूची से अलग हो गया है।

मेरे कोड:

colModel के लिए

:

{ name: 'OwnerEmail', index: 'OwnerEmail', width: 200, align: "center", sortable: true, sorttype: 'text', editable: true, edittype: 'select', editrules: { required: true }, editoptions: { value: ownersList} }, 

मैं चुनिंदा पंक्ति पर लटकती पॉप्युलेट (कि जब मैं एक पंक्ति चुनकर लटकती रीफ़्रेश होगा)

onSelectRow: function (id) { 
       var advOwners = $.ajax({ 
        type: 'POST', 
        data: {}, 
        url: 'MyWebService.asmx/GetOwners', 
        async: false, 
        error: function() { 
         alert('An error has occured retrieving Owners!'); 
        } 
       }).responseXML; 

       var aux = advOwners.getElementsByTagName("string"); 
       ownersList = ""; 
       for (var i = 0; i < aux.length; i++) { 
        ownersList += aux[i].childNodes[0].nodeValue + ':' + aux[i].childNodes[0].nodeValue + '; '; 
       } 
       ownersList = ownersList.substring(0, ownersList.length - 2); 

       jQuery("#GridView").setColProp('OwnerEmail', { editoptions: { value: ownersList} }); 
      } 

लेकिन जब मैं फिर से संपादन/जोड़ फ़ॉर्म दर्ज करता हूं, तो ड्रॉपडाउन को रीफ्रेश नहीं किया जाता है, इसमें आइटम पहले स्थान पर लोड किए जाते हैं।

कोई मदद?

धन्यवाद, जेफ

उत्तर

7

मुझे लगता है कि अगर आप के बजाय उपयोग value संपत्ति editoptions की dataUrl संपत्ति का प्रयोग करेंगे बेहतर होगा। मामले में मैन्युअल रूप से चयन डेटा प्राप्त करने के लिए आपको onSelectRow के अंदर सिंक्रोनस अजाक्स कॉल का उपयोग करने की आवश्यकता नहीं होगी। यदि डेटा की आवश्यकता होगी तो संबंधित कॉल आपके लिए jqGrid करेगा।

dataUrl से यूआरएल <select> तत्व के लिए एचटीएमएल खंड लौटा देना चाहिए जिसमें सभी <options> शामिल हैं। तो आप संबंधित buildSelect कॉलबैक फ़ंक्शन को लागू करने वाले आवश्यक प्रारूप में dataUrl से किसी भी अन्य प्रतिक्रिया को परिवर्तित कर सकते हैं।

आपकी जगह पर मैं वर्तमान में XML डेटा के बजाय 'MyWebService.asmx/GetOwners' URL से JSON डेटा वापस करना पसंद करूंगा। सबसे सामान्य स्थिति में यह आप HTTP का प्रयोग करेंगे तो HTTP POST दर्ज करने के बजाय आप HTTP शीर्ष लेख में Cache-Control: private, max-age=0 की स्थापना करके कैश से डेटा का उपयोग रोकने के लिए चाहिए जैसे

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public List<string> GetSelectData() { 
    return new List<string> { 
     "User1", "User2", "User3", "User4" 
    }; 
} 

वेब विधि हो सकता है। इसी कोड होगा

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public List<string> GetSelectData() { 
    HttpContext.Current.Response.Cache.SetMaxAge (new TimeSpan(0)); 
    return new List<string> { 
     "User1", "User2", "User3", "User4" 
    }; 
} 

डिफ़ॉल्ट प्रति jqGrid इसी अजाक्स कॉल (the source code देखें) में dataType: "html" का उपयोग करें। dataType: "json", contentType: "application/json" के व्यवहार को बदलने के आप अतिरिक्त के रूप में

ajaxSelectOptions: { contentType: "application/json", dataType: 'json' }, 

jqGrid के ajaxSelectOptions पैरामीटर का उपयोग करना चाहिए या

ajaxSelectOptions: { 
    contentType: "application/json", 
    dataType: 'json', 
    type: "POST" 
}, 

के रूप में यदि आप HTTP POST जो ASMX वेब सेवाओं के लिए डिफ़ॉल्ट है का उपयोग करेगा।

colModel में कॉलम के लिए प्रासंगिक सेटिंग हो जाएगा

edittype: 'select', editable: true, 
editoptions: { 
    dataUrl: '/MyWebService.asmx/GetSelectData', 
    buildSelect: buildSelectFromJson 
} 

जहां

var buildSelectFromJson = function (data) { 
     var html = '<select>', d = data.d, length = d.length, i = 0, item; 
     for (; i < length; i++) { 
      item = d[i]; 
      html += '<option value=' + item + '>' + item + '</option>'; 
     } 
     html += '</select>'; 
     return html; 
    }; 

सावधान रहें कि उपरोक्त कोड उपयोग data.d जो ASMX वेब सेवाओं के मामले में आवश्यक है। यदि आप एएसपी.नेट एमवीसी या डब्ल्यूसीएफ में माइग्रेट करेंगे तो आपको d संपत्ति के उपयोग को हटाने की आवश्यकता होगी और सीधे data का उपयोग करें।

अद्यतन: Here आप वीएस -2010 डेमो प्रोजेक्ट डाउनलोड कर सकते हैं जो मैंने ऊपर लिखा है लागू करता है।

+0

मैंने आपकी राय का पालन किया है और कोड बदल दिया है, लेकिन यह कभी भी GetSelectData वेब विधि में प्रवेश नहीं करता है .. –

+0

@ जेफ नॉर्मन: यदि आप मदद करेंगे तो मैं एक डेमो प्रोजेक्ट अपलोड कर सकता हूं जिसे मैंने अपने सुझावों को सत्यापित करने के लिए उपयोग किया था। – Oleg

+0

हां, कृपया ओलेग –

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

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