2011-03-31 11 views
8

मैं dojox.grid.datagrid बनाता हूं और मैं सरणी से सामग्री को भरता हूं जैसे उदाहरण last example on page। समय के दौरान, मैं कोड में उस सरणी का मान बदलता हूं। उस ग्रिड की सामग्री को रीफ्रेश कैसे करें? बदले गए सरणी से नया डेटा कैसे लोड करें?डेटाग्रिड को रीफ्रेश करने के लिए कैसे करें

उत्तर

22

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

तो कुंजी डोजो के डेटा एपीआई को समझना और डोजो में कैसे काम करता है। सीधे ग्रिड में डेटा में हेरफेर करने की बजाय, इसे स्टोर में हेरफेर करें।

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

इसके अलावा, डोजो डेटा पहचान एपीआई का उपयोग करके यदि संभव हो तो ग्रिड में आइटम ढूंढना बहुत आसान हो जाता है। मान लें कि जब कोई आइटम आपके एप्लिकेशन में अपडेट किया जाता है, हटाया जाता है, या बदला जाता है तो आपको कार्रवाई के दौरान आवश्यकतानुसार ग्रिड स्टोर को संशोधित करने में सक्षम होना चाहिए। यह निश्चित रूप से पसंदीदा दृष्टिकोण है। यदि आप ऐसा नहीं कर सकते हैं तो आपको सामान्य fetch करना होगा और अपने सरणी को मैन्युअल रूप से सिंक करने के लिए पूर्ण कॉलबैक का उपयोग करना होगा जो बहुत धीमा होगा और अच्छी तरह से स्केल नहीं करेगा, इस मामले में आप बस एक नया स्टोर भी बना सकते हैं एक साथ और

यहाँ एक बुनियादी बनाने के लिए, अद्यतन के साथ एक बेला है grid.setStore (myNewStore) के साथ ग्रिड के लिए असाइन करें, और हटाने आपरेशन: http://jsfiddle.net/BC7yT/11/

इन उदाहरणों सब एक पहचान की घोषणा जब बनाने का लाभ लेने दुकान।

var store = new dojo.data.ItemFileWriteStore({ 
    data: { 
     identifier : 'planet', 
     items: itemList 
    } 
}); 

अपडेट एक exisitng मद:

//If the store is not in your scope you can get it from the grid 
var store = grid.store; 
//fetchItemByIdentity would be faster here, but this uses query just to show 
//it is also possible 
store.fetch({query : {planet : 'Zoron'}, 
      onItem : function (item) { 

        var humans = store.getValue(item, 'humanPop'); 
        humans += 200; 
        store.setValue(item, 'humanPop', humans); 

       } 
     }); 

INSERT एक नया आइटम:

store.newItem({planet: 'Endron', humanPop : 40000, alienPop : 9000}); 
       } catch (e) { 
        //An item with the same identity already exists 
       } 

कोई आइटम हटाने: इस के साथ

store.fetchItemByIdentity({ 'identity' : 'Gaxula', onItem : function (item) { 
    if(item == null) { 
     //Item does not exist 
    } else { 
     store.deleteItem(item); 
    } 
}}); 
7

निम्नलिखित कोड का टुकड़ा ग्रिड अद्यतन करने के लिए इस्तेमाल किया जा सकता:

var newStore = new dojo.data.ItemFileReadStore({data: {... some new data ...}); 
var grid = dijit.byId("gridId"); 
grid.setStore(newStore); 

संपादित करें:

Dogo data grid reference guide (जोड़ें/पंक्तियों उदाहरण निकालने के लिए, ग्रिड डेटा उदाहरण को अद्यतन करना)

0

मैं एक specifi पंक्ति अद्यतन कर सकते हैं । यह उदाहरण एक वृक्षारोपण के लिए है।

var idx = this.treeGrid.getItemIndex(item); 
            if(typeof idx == "string"){ 
             this.treeGrid.updateRow(idx.split('/')[0]); 
            }else if(idx > -1){ 
             this.treeGrid.updateRow(idx); 
            } 
3

(मुझे लगता है कि आप पहले से ही एक काम ग्रिड है और आप पूरी तरह से ग्रिड की दुकान को बदलना चाहते हैं)

  1. अपने नए मूल्य के साथ एक नया डेटासंग्रह बनाएँ:

    dataStore = new ObjectStore({ objectStore:new Memory({ data: data.items }) }); 
    

    (डेटा मेरे लिए AJAX अनुरोध से प्रतिक्रिया है)

  2. अपनी ग्रिड की बदलें नए के साथ फाड़े:

    grid.store = dataStore; 
    
  3. प्रस्तुत:

    grid.render(); 
    
2

डोजो 1.9 की

grid.store = store; 
grid._refresh(); 
1
ग्रिड स्टोर अद्यतन और नवीनतम में ग्रिड के दृश्य ताज़ा होगी संस्करण इस

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

हालांकि मेरे पास एक और एन्हांस्ड ग्रिड था जो फ़िल्टर लागू होने पर रीफ्रेश नहीं होता था। हो सकता है कि यह क्लाइंट पक्ष फ़िल्टर किया गया हो (लेकिन डेटा अभी भी जेसनरस्ट स्टोर का उपयोग कर सर्वर से आ रहा है), लेकिन मुझे वास्तव में कारण पता नहीं है।

grid.setFilter(grid.getFilter()); 

यह hacky और अजीब बात है, लेकिन अगर यह सब कुछ विफल हो ...

: Eitherway, समाधान निम्न कोड के साथ ताज़ा करने के लिए था
संबंधित मुद्दे