Rechargement / rafraîchissement de la grille de Kendo


171

Comment recharger ou actualiser une grille de Kendo en utilisant Javascript?

Il est souvent nécessaire de recharger ou d'actualiser une grille après un certain temps ou après une action de l'utilisateur.

Réponses:


314

Vous pouvez utiliser

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

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

19
@zespri readdemandera au serveur et rechargera uniquement la source de données. Il n'y aura aucun changement dans l'interface utilisateur. refreshrendra à nouveau les éléments de la grille à partir de la source de données actuelle. C'est pourquoi les deux sont nécessaires.
Botis

37
Je ne pense pas que vous ayez besoin de l'actualisation de la dernière version de Kendo. Comme cela semble fonctionner
correctement

2
Ouais! Cela fonctionne aussi avec TreeList: $ ('# Gantt'). Data ('kendoTreeList'). DataSource.read (); $ ('# Gantt'). Data ('kendoTreeList'). Refresh ();
Hernaldo Gonzalez

27
Les développeurs disent explicitement de ne pas appeler d'actualisation après la lecture: telerik.com/forums/show-progress-spinner-during-load-refresh, car cela peut empêcher l'affichage de l'indicateur de progression.
Rustam Miftakhutdinov

2
J'utilise une version plus récente et je n'ai qu'à appeler .read. L'appel de .refresh après lecture entraîne deux voyages vers le serveur pour les données.
Justin le

59

Je ne fais jamais de rafraîchissement.

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

seul fonctionne pour moi tout le temps.


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

Merci, mais cela donne l'erreur "TypeError: $ (...). Data (...) is undefined". J'ai également regardé sur de nombreuses pages et essayé différentes variantes de cette solution, mais j'ai toujours la même erreur. Une idée?
Jack

Si data ('kendoGrid') renvoie null, alors il est fort probable que l'id soit incorrect ou que vous n'ayez pas encore créé la grille. NB vous faites la grille avec $ (..). KendoGrid () et y accédez plus tard avec $ (). Data ('kendoGrid')
tony

29

Dans un projet récent, j'ai dû mettre à jour la grille d'interface utilisateur de Kendo en fonction de certains appels, qui se produisaient sur certaines listes déroulantes. Voici ce que j'ai fini par utiliser:

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

Espérons que cela vous fera gagner du temps.


exactement ce que je cherchais grid.setDataSource (dataSource); pour les appels non distants, c'est ce que vous devez utiliser. Merci!
Rui Lima le

15

Pas une seule de ces réponses n'obtient le fait que readrenvoie une promesse, ce qui signifie que vous pouvez attendre que les données se chargent avant d'appeler refresh.

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

Cela n'est pas nécessaire si votre capture de données est instantanée / synchrone, mais il est plus que probable qu'elle provienne d'un point de terminaison qui ne reviendra pas immédiatement.


1
Tirer parti de la prise en charge intégrée des promesses est vraiment pratique et a également supprimé quelques lignes de code. Je parierais que ce devrait être la vraie réponse.
FoxDeploy

1
Merci Zachary! J'ai passé quelques heures sur ce problème - votre solution est la seule qui a fonctionné pour moi. J'insère des lignes dans ma source de base de données de grille via ajax, en boucle (une ligne à la fois). Une fois la boucle terminée, dataSource.read () ne fonctionnait que parfois. «alors» est ce dont j'avais besoin. Très appréciée!
Antony D le

9

Si vous ne souhaitez pas avoir de référence à la grille dans le gestionnaire, vous pouvez utiliser ce code:

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

Cela rafraîchira la grille, s'il y a un bouton d'actualisation. Le bouton peut être activé comme ceci:

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

9

En fait, ils sont différents:

  • $('#GridName').data('kendoGrid').dataSource.read()actualise les uidattributs de la ligne du tableau

  • $('#GridName').data('kendoGrid').refresh() laisse le même uid


8

Ce que vous devez faire est simplement d'ajouter un événement .Events (events => events.Sync ("KendoGridRefresh")) dans votre code de liaison kendoGrid. Pas besoin d'écrire le code d'actualisation dans le résultat 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" })          
  )

Et vous pouvez ajouter la fonction globale suivante dans n'importe lequel de vos fichiers .js. Ainsi, vous pouvez l'appeler pour toutes les grilles de kendo de votre projet afin de rafraîchir le kendoGrid.

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

Actualisez kendoGrid en ajoutant simplement un événement.
Milan

8

Dans mon cas, j'avais une URL personnalisée à chaque fois; bien que le schéma du résultat reste le même.
J'ai utilisé ce qui suit:

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

Vous pouvez utiliser les lignes ci-dessous

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

Pour une fonction d'actualisation automatique, regardez ici


5

En utilisant le code suivant, il a automatiquement appelé la méthode de lecture de la grille et à nouveau remplir la grille

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

5

Une autre façon de recharger la grille est

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

5

Vous pouvez toujours utiliser $('#GridName').data('kendoGrid').dataSource.read();. Vous n'avez pas vraiment besoin de le faire .refresh();après cela, .dataSource.read();fera l'affaire.

Maintenant, si vous souhaitez actualiser votre grille de manière plus angulaire, vous pouvez faire:

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

vm.grid.dataSource.read();`

OU

vm.gridOptions.dataSource.read();

Et n'oubliez pas de déclarer votre source de données comme kendo.data.DataSourcetype


5

J'ai utilisé Jquery .ajax pour obtenir des données. Afin de recharger les données dans la grille actuelle, je dois faire ce qui suit:

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

4

Je veux revenir à la page 1 lorsque j'actualise la grille. Le simple fait d'appeler la fonction read () vous gardera sur la page actuelle, même si les nouveaux résultats n'ont pas autant de pages. L'appel de .page (1) sur la source de données actualisera la source de données ET retournera à la page 1 mais échouera sur les grilles qui ne sont pas paginables. Cette fonction gère à la fois:

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

Afin de faire une actualisation complète, où la grille sera restituée avec une nouvelle demande de lecture, vous pouvez effectuer les opérations suivantes:

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

Où la propriété peut être n'importe quelle propriété, par exemple triable


3

Écrivez juste ci-dessous le code

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

1
Ce ne serait vrai que si vous avez initialisé la grille avec un pageable.refresh = true ... ce qui n'est pas par défaut. Quoi qu'il en soit, vous ne devriez pas utiliser une solution de contournement de l'interface utilisateur lorsque vous êtes en mesure de le faire à l'aide d'une fonction API (voir la réponse acceptée)
The_Black_Smurf


3

Vous pouvez essayer:

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

3

Si vous souhaitez que la grille soit automatiquement actualisée sur une base chronométrée, vous pouvez utiliser l'exemple suivant avec un intervalle de 30 secondes:

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

2

La configuration / les données par défaut / mises à jour des widgets sont définies pour se lier automatiquement à une source de données associée.

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

Y avait-il quelque chose qui n'allait pas avec la réponse acceptée (de 2013), puisque votre réponse est si similaire. Vous devriez au moins commenter d'une manière ou d'une autre - et les commentaires dans cette réponse disent même que vous ne devriez pas appelerrefresh
James Z

2

Vous pouvez également actualiser votre grille en envoyant de nouveaux paramètres à l'action Lire et en définissant les pages comme vous le souhaitez:

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

Dans cet exemple, l'action de lecture de la grille est appelée par la valeur de 2 paramètres et après avoir obtenu le résultat, la pagination de la grille est à la page 1.


1

Le moyen le plus simple d'actualiser est d'utiliser la fonction refresh (). Ce qui va comme:

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

tandis que vous pouvez également actualiser la source de données à l'aide de cette commande:

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

Ce dernier recharge en fait la source de données de la grille. L'utilisation des deux peut être faite selon vos besoins et vos exigences.


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

Bien qu'il ne s'agisse au moins d'aucun copier-coller 1to1, il ne fournit aucune information supplémentaire. Presque toutes les réponses dans ce post avec plus d'un vote positif recommandé d'utiliserdataSource.read()
Fabian N.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.