केडो ग्रिड को पुनः लोड करना / रिफ्रेश करना


171

जावास्क्रिप्ट का उपयोग करके एक केन्डो ग्रिड को फिर से लोड या ताज़ा कैसे करें?

कुछ समय बाद या उपयोगकर्ता कार्रवाई के बाद ग्रिड को फिर से लोड करना या ताज़ा करना आवश्यक है।

जवाबों:


314

आप उपयोग कर सकते हैं

$('#GridName').data('kendoGrid').dataSource.read(); <!--  first reload data source -->

$('#GridName').data('kendoGrid').refresh(); <!--  refresh current UI -->

19
@zespri readसर्वर से अनुरोध करेगा और केवल डेटा स्रोत पुनः लोड करेगा। यूआई में कोई बदलाव नहीं होगा। refreshवर्तमान डेटा स्रोत से ग्रिड में आइटम को फिर से प्रस्तुत करेंगे। इसलिए दोनों की आवश्यकता है।
बॉटिस

37
मुझे नहीं लगता कि आपको Kendo के नवीनतम संस्करण में ताज़ा करने की आवश्यकता है। जैसा कि इसके बिना ठीक काम करने के लिए लगता है
ग्रीमएमिलर

2
हाँ! ट्रीलिस्ट के साथ भी यह काम: $ ('# गैंट')। डेटा ('मेंडोट्रीस्टलिस्ट')। dataSource.read (); $ ( '# गैंट') को डेटा ( 'kendoTreeList') ताज़ा ()।।
हरनल्डो गोंजालेज

27
डेवलपर्स स्पष्ट रूप से कहते हैं कि पढ़ने के बाद ताज़ा न कहें: telerik.com/forums/show-progress-spinner-during-load-refresh क्योंकि यह प्रगति संकेतक को प्रदर्शित होने से रोक सकता है।
रुस्तम मिफ्तखुद्दीनोव

2
मैं एक नए संस्करण का उपयोग कर रहा हूं और मुझे केवल .read कॉल करना है। पढ़ने के बाद .refresh को कॉल करने से डेटा के लिए सर्वर पर दो ट्रिप होती हैं।
जस्टिन

59

मैं कभी रिफ्रेश नहीं करता।

$('#GridName').data('kendoGrid').dataSource.read();

अकेले मेरे लिए हर समय काम करता है।


31
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();

धन्यवाद, लेकिन इससे "TypeError: $ (...)। डेटा (...) अपरिभाषित है" त्रुटि। मैंने कई पृष्ठों को भी देखा और इस समाधान के विभिन्न रूपों की कोशिश की, लेकिन अभी भी वही त्रुटि मिलती है। कोई उपाय?
जैक

यदि डेटा ('kendoGrid') शून्य है, तो सबसे अधिक संभावना है कि या तो आईडी गलत है या आपने अभी तक ग्रिड नहीं बनाया है। नायब आप $ (..) के साथ ग्रिड बनाने kendoGrid () है और यह पहुँच बाद में $ () डेटा ( 'kendoGrid') के
टोनी

29

हाल के एक प्रोजेक्ट में, मुझे कुछ कॉल के आधार पर केडो यूआई ग्रिड को अपडेट करना था, जो कि कुछ ड्रॉपडाउन चयनों पर हो रहा था। यहाँ मैं का उपयोग कर समाप्त हो गया है:

$.ajax({
        url: '/api/....',
        data: { myIDSArray: javascriptArrayOfIDs },
        traditional: true,
        success: function(result) {
            searchResults = result;
        }
    }).done(function() {
        var dataSource = new kendo.data.DataSource({ data: searchResults });
        var grid = $('#myKendoGrid').data("kendoGrid");
        dataSource.read();
        grid.setDataSource(dataSource);
    });

उम्मीद है कि यह आपको कुछ समय बचाएगा।


वास्तव में मैं ग्रिड.सेटडॉटसोर्स (डेटा स्रोत) की तलाश में था; गैर-दूरस्थ कॉल के लिए यह वही है जो आपको उपयोग करना है। धन्यवाद!
रुई लीमा

15

इनमें से एक भी उत्तर को तथ्य नहीं मिलता है जो readएक वादा लौटाता है, जिसका अर्थ है कि आप ताज़ा कॉल करने से पहले डेटा के लोड होने की प्रतीक्षा कर सकते हैं।

$('#GridId').data('kendoGrid').dataSource.read().then(function() {
    $('#GridId').data('kendoGrid').refresh();
});

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


1
अंतर्निहित वादा समर्थन का लाभ उठाना वास्तव में सुविधाजनक है और कोड की कुछ पंक्तियों को भी हटा दिया है। मैं कहूंगा कि यह सही जवाब होना चाहिए।
FoxDeploy

1
शुक्रिया ज़ाचारी! मैंने इस समस्या पर कुछ घंटे बिताए हैं - आपका समाधान केवल वही है जो मेरे लिए काम करता है। मैं अजाक्स, लूपेड (एक समय में एक पंक्ति) के माध्यम से अपने ग्रिड डेटाबेस स्रोत में पंक्तियों को सम्मिलित कर रहा हूं। लूप के समाप्त होने के बाद dataSource.read () केवल कभी-कभी काम करता है। "तब" मुझे वही चाहिए जो मुझे चाहिए। बहुत सराहना की!
एंटनी डी

9

यदि आप हैंडलर में ग्रिड का संदर्भ नहीं चाहते हैं, तो आप इस कोड का उपयोग कर सकते हैं:

 $(".k-pager-refresh").trigger('click');

यह रिफ्रेश बटन होने पर ग्रिड को रिफ्रेश करेगा। बटन को इस तरह सक्षम किया जा सकता है:

[MVC GRID DECLARATION].Pageable(p=> p.Refresh(true))


8

आपको बस एक ईवेंट जोड़ना होगा । अपने kendoGrid के बाइंडिंग कोड में ईवेंट्स (ईवेंट्स => ईवेंट्स। सिंक ("KendoGridRefresh")) । अजाक्स रिजल्ट में रिफ्रेश कोड लिखने की जरूरत नहीं है।

@(Html.Kendo().Grid<Models.DocumentDetail>().Name("document")
    .DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .Model(model => model.Id(m => m.Id))        
    .Events(events => events.Sync("KendoGridRefresh"))    
    )
      .Columns(columns =>
      {
          columns.Bound(c => c.Id).Hidden();              
          columns.Bound(c => c.UserName).Title(@Resources.Resource.lblAddedBy);                           
      }).Events(e => e.DataBound("onRowBound"))
          .ToolBar(toolbar => toolbar.Create().Text(@Resources.Resource.lblNewDocument))
          .Sortable()          
          .HtmlAttributes(new { style = "height:260px" })          
  )

और आप अपनी किसी भी .js फ़ाइल में निम्न ग्लोबल फ़ंक्शन जोड़ सकते हैं। तो, आप इसे अपने प्रोजेक्ट में सभी मेंडोज़ ग्रिड के लिए कह सकते हैं कि मेंडग्रिड ताज़ा करें।

function KendoGridRefresh() {
    var grid = $('#document').data('kendoGrid');
    grid.dataSource.read();
}

केवल ईवेंट जोड़कर मेंडग्रिड ताज़ा करें।
मिलन

8

मेरे मामले में मेरे पास हर बार जाने के लिए एक कस्टम यूआरएल था; हालांकि परिणाम का स्कीमा वही रहेगा।
मैंने निम्नलिखित प्रयोग किया:

var searchResults = null;
$.ajax({
        url: http://myhost/context/resource,
        dataType: "json",
        success: function (result, textStatus, jqXHR) {
            //massage results and store in searchResults
            searchResults = massageData(result);
        }
    }).done(function() {
        //Kendo grid stuff
        var dataSource = new kendo.data.DataSource({ data: searchResults });
        var grid = $('#doc-list-grid').data('kendoGrid');
        dataSource.read();
        grid.setDataSource(dataSource);
    });

5

आप नीचे की पंक्तियों का उपयोग कर सकते हैं

$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();

ऑटो रिफ्रेश फीचर के लिए यहां एक नजर डालते हैं


5

निम्नलिखित कोड का उपयोग करके इसे स्वचालित रूप से ग्रिड की रीड विधि कहा जाता है और फिर से ग्रिड को भरना है

$('#GridName').data('kendoGrid').dataSource.read();

5

ग्रिड को फिर से लोड करने का एक वैकल्पिक तरीका है

$("#GridName").getKendoGrid().dataSource.read();

5

आप हमेशा उपयोग कर सकते हैं $('#GridName').data('kendoGrid').dataSource.read();। तुम सच में करने की जरूरत नहीं है .refresh();उसके बाद, .dataSource.read();चाल करेंगे।

अब यदि आप अपने ग्रिड को अधिक कोणीय तरीके से ताज़ा करना चाहते हैं, तो आप कर सकते हैं:

<div kendo-grid="vm.grid" id="grid" options="vm.gridOptions"></div>

vm.grid.dataSource.read();`

या

vm.gridOptions.dataSource.read();

और अपने डेटा स्रोत को kendo.data.DataSourceप्रकार घोषित करने के लिए मत भूलना


5

मैंने डेटा प्राप्त करने के लिए Jquery .ajax का उपयोग किया। वर्तमान ग्रिड में डेटा को पुनः लोड करने के लिए, मुझे निम्नलिखित करने की आवश्यकता है:

.success (function (result){
    $("#grid").data("kendoGrid").dataSource.data(result.data);
})

4

जब मैं ग्रिड को रिफ्रेश करता हूं तो मैं पेज 1 पर वापस जाना चाहता हूं। बस रीडिंग () फ़ंक्शन को कॉल करना आपको वर्तमान पृष्ठ पर रखेगा, भले ही नए परिणाम में कई पृष्ठ न हों। डेटासोर्स पर कॉलिंग .पृष्ठ (1) डेटा स्रोत को रीफ़्रेश करेगी और पेज 1 पर वापस आ जाएगी, लेकिन उन ग्रिडों पर विफल हो जाती है, जो कि देखने योग्य नहीं हैं। यह फ़ंक्शन दोनों को संभालता है:

function refreshGrid(selector) {
     var grid = $(selector);
     if (grid.length === 0)
         return;

     grid = grid.data('kendoGrid');
     if (grid.getOptions().pageable) {
         grid.dataSource.page(1);
     }
     else {
         grid.dataSource.read();
     }
}

4

एक पूर्ण रिफ्रेश करने के लिए, जहाँ ग्रिड को नए रीड रिक्वेस्ट के साथ फिर से प्रस्तुत किया जाएगा, आप निम्न कार्य कर सकते हैं:

 Grid.setOptions({
      property: true/false
    });

जहां संपत्ति किसी भी संपत्ति हो सकती है जैसे कि छांटना


3

बस कोड के नीचे लिखें

$('.k-i-refresh').click();

1
यह तभी सही होगा जब आपने ग्रिड को पगमेबल के साथ आरंभीकृत किया हो। सही = सही ... जो डिफ़ॉल्ट रूप से नहीं है। वैसे भी, आपको एक यूआई वर्कअराउंड का उपयोग नहीं करना चाहिए जब आप इसे एक एपीआई फ़ंक्शन (स्वीकृत उत्तर देखें) का उपयोग करके कर सकते हैं
The_Black_Smurf



3

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

   <script type="text/javascript" language="javascript">
      $(document).ready(function () {
         setInterval(function () {
            var grid = $("#GridName").data("kendoGrid");
            grid.dataSource.read();
         }, 30000);
      });
   </script>

2

विजेट्स का डिफ़ॉल्ट / अपडेटेड कॉन्फ़िगरेशन / डेटा स्वचालित रूप से एक संबंधित डेटा स्रोत से जुड़ने के लिए सेट है।

$('#GridId').data('kendoGrid').dataSource.read();
$('#GridId').data('kendoGrid').refresh();

क्या स्वीकृत उत्तर (2013 से) में कुछ गड़बड़ थी, क्योंकि आपका उत्तर ऐसा ही लगता है। आपको कम से कम इस तरह से टिप्पणी करनी चाहिए - और उस उत्तर में टिप्पणियों का यह भी कहना है कि आपको कॉल नहीं करना चाहिएrefresh
जेम्स जेड

2

आप अपने ग्रिड को रिफ्रेश करने के लिए नए मापदंडों को भेजने के साथ कार्रवाई और पृष्ठों को सेट कर सकते हैं जो आपको पसंद हैं:

var ds = $("#gridName").data("kendoGrid").dataSource;
ds.options.page = 1;
var parameters = {
    id: 1
    name: 'test'
}
ds.read(parameters);

इस उदाहरण में ग्रिड की क्रिया को 2 मापदंडों के मान से बुलाया जा रहा है और परिणाम प्राप्त करने के बाद ग्रिड का पेजिंग पेज 1 में है।


1

ताज़ा करने के लिए सबसे आसान तरीका ताज़ा () फ़ंक्शन का उपयोग करना है। जो इस प्रकार है:

$('#gridName').data('kendoGrid').refresh();

जब आप इस आदेश का उपयोग करके डेटा स्रोत को भी ताज़ा कर सकते हैं:

$('#gridName').data('kendoGrid').dataSource.read();

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


-2
$("#grd").data("kendoGrid").dataSource.read();

जबकि यह कम से कम 1to1 कॉपी पेस्ट है, यह कोई अतिरिक्त जानकारी प्रदान नहीं करता है। इस पोस्ट में लगभग हर उत्तर में एक से अधिक अपवोट का उपयोग करने की सिफारिश की गई हैdataSource.read()
फाबियान एन।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.