2013-02-07 51 views
7

मेरे पास एक संपादन योग्य केंडो ग्रिड है जहां मैं एक सेल संपादित कर सकता हूं और ग्रिड सेल के ऊपरी बाएं कोने में लाल निशान जोड़ता है।मैन्युअल रूप से केंडो ग्रिड में पेजिंग पर गंदे सेल मार्कर को बनाए रखने

मैं दूसरे पृष्ठ पर जाता हूं और फिर उस पृष्ठ पर वापस आ जाता हूं जहां संपादन हुआ था और लाल निशान चला गया है लेकिन सेल में नया जोड़ा मूल्य बना हुआ है। मैंने केंडो साइट पर इसका जवाब देखा जहां इसे सलाह दी गई थी: "हर बार ग्रिड रिबाउंड होने पर" गंदे झंडे "को दिखाने के लिए इसे सभी मॉडल के माध्यम से फिर से शुरू करना होगा, अगर सभी क्षेत्रों को बदल दिया जाए और दिखाई दे ग्रिड कोशिकाएं। "

मैं इस संभालने हूँ ग्रिड के DataBound() घटना पर किया जा करने की आवश्यकता होगी, जहां मैं मैन्युअल रूप से सेल को k-dirty-cell वर्ग लागू होगी (आग जब मैं पृष्ठों स्विच लगता है), लेकिन मैं कर सकते हैं ' इस काम को कोड में कैसे बनाया जाए, यह समझें। किसी भी विचार की सराहना की जाती है।

$(function() { 
        $("#grid").kendoGrid({ 
         height: 550, 
         scrollable: true, 
         sortable: true, 
         filterable: true, 
         resizable: true, 
         reorderable: true, 
         groupable: false, 
         editable: true, // enable editing 
         columns: [ 
            //REMOVED TO SHORTEN EXAMPLE  
            ], 
         toolbar: [{name: "save", text: "Save All Records"}, "cancel"], 
         dataSource: { 
          schema: { 
           data: "d", 
           total: function(data) { 
            return data.d.length; 
           }, 
           model: { 
            //REMOVED TO SHORTEN EXAMPLE 
            } 
           } 
          }, 
          batch: true, 
          pageSize: 10, 
          transport: { 
           read: { 

           }, 
           parameterMap: function (data, operation) { 
            if (operation == "read") { 
             //WEB SERVICE CALLS REMOVED... YOU GET THE POINT 
            } 
            else if(operation == "update") { 
             //WEB SERVICE CALLS REMOVED... YOU GET THE POINT 
            } 
           } 
          }, 
         }, 
         selectable: true, 
         pageable: true, 
         dataBound: function() 
         { 
           //THIS IS FIRED WHEN I CHANGE PAGEs BUT 
           //NOT SURE WHAT CODE GOES HERE TO 
           //REAPPLY DIRTY CELL MARKER 
       }; 

उत्तर

9

डेटाबाउंड घटना को यह फिर से लागू एक अच्छी जगह है, लेकिन मैं जब ग्रिड के dataItems के माध्यम से पाशन, वहाँ प्रत्येक पंक्ति के लिए एक गंदा ध्वज, लेकिन नहीं प्रत्येक क्षेत्र है कि दिमाग में रखना।

यह बहुत संभव है कि मुझे ग्रिड में लंबित परिवर्तनों को संदर्भित करने के तरीके से अवगत नहीं है, लेकिन मैंने एक छोटी प्रणाली को और अधिक बारीक स्तर पर ऐसे परिवर्तनों को ट्रैक करने के लिए एक तरीका वापस लिखा है।

मेरे सिस्टम में, मैं लंबित परिवर्तनों नामक वैश्विक चर में ग्रिड के लंबित परिवर्तनों को संग्रहीत करता हूं।

मैं फिर दो घटनाओं को निर्दिष्ट करता हूं। ग्रिड के डेटा स्रोत में पहला change event है। इस कोड को जानकारी आप परिवर्तन यह है कि सिर्फ हुआ से की जरूरत है संग्रहीत करता है:

function GridDataBound(e) { 
    for (var i = 0; i < PendingChanges.length; i++) { 
     var row = this.tbody.find("tr[data-uid='" + PendingChanges[i].uid + "']"); 
     var cell = row.find("td:eq(" + PendingChanges[i].ColumnIndex + ")"); 

     if (!cell.hasClass("k-dirty-cell")) { 
      cell.addClass("k-dirty-cell"); 
      cell.prepend("<span class='k-dirty'></span>"); 
     } 
    } 
} 
:

var PendingChanges = []; 
    function GridEdit(e) { 
     var cellHeader = $("#grid").find("th[data-title='" + e.field + "']"); 
     if (cellHeader[0] != undefined) { 
      var pendingChange = new Object(); 
      //Holds field name 
      pendingChange.PropertyName = e.field; 
      //Keeps track of which td element to select when re-adding the red triangle 
      pendingChange.ColumnIndex = cellHeader[0].cellIndex; 
      //used to pull row. Better than the row's id because you could have 
      //multiple rows that have been inserted but not saved (ie. all have 
      //ID set to 0 
      pendingChange.uid = e.items[0].uid; 
      //Remember to clear this out after you save 
      PendingChanges.push(pendingChange); 
     } 
    } 

फिर, मैं क्या लंबित परिवर्तन के आसपास रहे हैं की जाँच करें और लाल त्रिकोण प्रदर्शित करने के लिए प्रासंगिक कोशिकाओं स्थापित करने के लिए dataBound event का उपयोग

उपरोक्त कोड में thisThe widget instance which fired the event. का जिक्र कर रहा है। यह सीधे केंडो यूआई डॉक्स से है।

उम्मीद है कि यह आपको कम से कम सही दिशा में इंगित करता है। यदि आप ग्रिड को सहेज रहे हैं, तो एक बार सफल सहेजने के बाद लंबितChanges सरणी को साफ़ करना न भूलें। मैं इसके लिए RequestEnd घटना का उपयोग करने का सुझाव देता हूं।

+0

अच्छा विचार, हालांकि यह मेरे मामले में विफल रहता है, क्योंकि वें [डेटा-शीर्षक] कॉलम शीर्षक (मेरे मामले में कस्टम शीर्षक श्रेणी) द्वारा दिया जाता है और e.field मॉडल संपत्ति का नाम है (मेरे मामले में श्रेणियाँ)। मैं इसे कुछ संशोधनों के साथ सोच सकता हूं और शायद यह काम कर सकता है। –

+1

ठीक है, दो संशोधन: 1) मेरी पिछली टिप्पणी और 2) में समस्या से बचने के लिए वें [डेटा-फील्ड] का उपयोग करें। ($। "" ग्रिड ") का उपयोग करें। ('। K-edit-cell')। Parent ('tr') को डेटा ('यूआईडी')। पंक्ति uid को इंडेंटिफाइंड करने के लिए क्योंकि जब संपादक संपादक का उपयोग सेल संपादक के रूप में करते हैं, e.items [0] .uid; गलत है –