Ricarica / aggiorna la griglia di Kendo


171

Come ricaricare o aggiornare una griglia di Kendo usando Javascript?

Spesso è necessario ricaricare o aggiornare una griglia dopo qualche tempo o dopo un'azione dell'utente.

Risposte:


314

Puoi usare

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

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

19
@zespri readrichiederà il server e ricaricherà solo l'origine dati. Non ci saranno cambiamenti nell'interfaccia utente. refresheseguirà nuovamente il rendering degli elementi nella griglia dall'origine dati corrente. Ecco perché sono richiesti entrambi.
Botis,

37
Non penso che tu abbia bisogno dell'aggiornamento nell'ultima versione di Kendo. Come sembra funzionare bene senza di essa
GraemeMiller

2
Si! Questo funziona anche con TreeList: $ ('# Gantt'). Data ('kendoTreeList'). DataSource.read (); $ ( '# Gantt') dei dati ( 'kendoTreeList') refresh ()..;
Hernaldo Gonzalez,

27
Gli sviluppatori dichiarano esplicitamente di non chiamare refresh dopo aver letto: telerik.com/forums/show-progress-spinner-during-load-refresh perché potrebbe impedire la visualizzazione dell'indicatore di progresso.
Rustam Miftakhutdinov

2
Sto usando una versione più recente e devo solo chiamare .read. Chiamare .refresh dopo aver letto causa due viaggi al server per i dati.
Giustino,

59

Non aggiorno mai.

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

da solo lavora sempre per me.


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

Grazie, ma questo dà l'errore "TypeError: $ (...). Data (...) non definito". Ho anche cercato su molte pagine e provato diverse varianti di questa soluzione, ma ho ancora lo stesso errore. Qualche idea?
Jack,

Se i dati ('kendoGrid') restituiscono null allora molto probabilmente l'id è sbagliato o non hai ancora creato la griglia. NB si crea la griglia con $ (..). KendoGrid () e si accede successivamente con $ (). Data ('kendoGrid')
tony

29

In un recente progetto, ho dovuto aggiornare la griglia dell'interfaccia utente di Kendo in base ad alcune chiamate, che si stavano verificando su alcune selezioni a discesa. Ecco cosa ho finito per usare:

$.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);
    });

Spero che questo ti farà risparmiare un po 'di tempo.


esattamente quello che stavo cercando grid.setDataSource (dataSource); per le chiamate non remote è quello che devi usare. Grazie!
Rui Lima,

15

Nessuna di queste risposte ottiene il fatto che readrestituisce una promessa, il che significa che è possibile attendere il caricamento dei dati prima di chiamare l'aggiornamento.

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

Questo non è necessario se la tua acquisizione di dati è istantanea / sincrona, ma molto probabilmente proviene da un endpoint che non tornerà immediatamente.


1
Sfruttare il supporto promessa integrato è davvero conveniente e ha rimosso anche alcune righe di codice. Scommetto che questa dovrebbe essere la vera risposta.
FoxDeploy,

1
Grazie Zachary! Ho trascorso un paio d'ore su questo problema: la tua soluzione è l'unica che ha funzionato per me. Sto inserendo righe nella mia sorgente del database della griglia tramite Ajax, in loop (una riga alla volta). Al termine del ciclo dataSource.read () ha funzionato solo a volte. "allora" è ciò di cui avevo bisogno. Molto apprezzato!
Antony D,

9

Se non si desidera avere un riferimento alla griglia nel gestore, è possibile utilizzare questo codice:

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

Ciò aggiornerà la griglia, se è presente un pulsante di aggiornamento. Il pulsante può essere abilitato in questo modo:

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

9

In realtà, sono diversi:

  • $('#GridName').data('kendoGrid').dataSource.read()aggiorna gli uidattributi della riga della tabella

  • $('#GridName').data('kendoGrid').refresh() lascia lo stesso uid


8

Quello che devi fare è solo aggiungere un evento .Events (events => events.Sync ("KendoGridRefresh")) nel tuo codice di associazione kendoGrid. Non è necessario scrivere il codice di aggiornamento nel risultato ajax.

@(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" })          
  )

E puoi aggiungere la seguente funzione globale in qualsiasi tuo file .js. quindi, puoi chiamarlo per tutte le griglie kendo nel tuo progetto per aggiornare kendoGrid.

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

Aggiorna kendoGrid semplicemente aggiungendo Evento.
Milano,

8

Nel mio caso avevo un URL personalizzato a cui andare ogni volta; sebbene lo schema del risultato rimarrebbe lo stesso.
Ho usato il seguente:

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

È possibile utilizzare le righe seguenti

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

Per una funzione di aggiornamento automatico dai un'occhiata qui


5

Usando il seguente codice, chiamava automaticamente il metodo di lettura della griglia e riempiva nuovamente la griglia

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

5

Un modo alternativo per ricaricare la griglia è

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

5

Puoi sempre usare $('#GridName').data('kendoGrid').dataSource.read();. Non hai davvero bisogno di farlo .refresh();, .dataSource.read();farà il trucco.

Ora se vuoi aggiornare la tua griglia in un modo più angolare, puoi fare:

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

vm.grid.dataSource.read();`

O

vm.gridOptions.dataSource.read();

E non dimenticare di dichiarare l'origine dati come kendo.data.DataSourcetipo


5

Ho usato Jquery .ajax per ottenere dati. Per ricaricare i dati nella griglia corrente, devo fare quanto segue:

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

4

Voglio tornare alla pagina 1 quando aggiorno la griglia. Basta chiamare la funzione read () per rimanere sulla pagina corrente, anche se i nuovi risultati non hanno così tante pagine. La chiamata a .page (1) sull'origine dati aggiornerà l'origine dati E tornerà alla pagina 1 ma non riesce sulle griglie che non sono pagabili. Questa funzione gestisce entrambi:

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

Per eseguire un aggiornamento completo, in cui la griglia verrà nuovamente renderizzata insieme a una nuova richiesta di lettura, è possibile effettuare le seguenti operazioni:

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

Dove la proprietà può essere qualsiasi proprietà, ad esempio ordinabile


3

Basta scrivere sotto il codice

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

1
Questo sarebbe vero solo se hai inizializzato la griglia con un pageable.refresh = true ... che non è di default. In ogni caso, non dovresti usare una soluzione alternativa all'interfaccia utente quando sei in grado di farlo utilizzando una funzione API (vedi risposta accettata)
The_Black_Smurf


3

Puoi provare:

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

3

Se desideri che la griglia venga aggiornata automaticamente su base temporale, puoi utilizzare il seguente esempio con l'intervallo impostato su 30 secondi:

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

2

La configurazione / i dati predefiniti / aggiornati dei widget sono impostati per associarsi automaticamente a un'origine dati associata.

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

C'è stato qualcosa di sbagliato nella risposta accettata (dal 2013), poiché la tua risposta è molto simile. Dovresti almeno commentarlo in qualche modo - e i commenti in quella risposta dicono anche che non dovresti chiamarerefresh
James Z

2

Puoi anche aggiornare la tua griglia inviando nuovi parametri all'azione Leggi e impostando le pagine come preferisci:

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

In questo esempio, l'azione di lettura della griglia viene richiamata dal valore di 2 parametri e dopo aver ottenuto il risultato il paging della griglia è nella pagina 1.


1

La via più semplice per aggiornare è usare la funzione refresh (). Che va come:

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

mentre puoi anche aggiornare l'origine dati usando questo comando:

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

Quest'ultimo ricarica effettivamente l'origine dati della griglia. L'uso di entrambi può essere fatto in base alle proprie esigenze e necessità.


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

Sebbene questa non sia almeno una copia copia 1to1, non fornisce ulteriori informazioni. Quasi tutte le risposte in questo post con più di un voto si consigliano di utilizzaredataSource.read()
Fabian N.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.