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.

Oxon
la source

Réponses:

314

Vous pouvez utiliser

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

$('#GridName').data('kendoGrid').refresh(); <!--  refresh current UI -->
Jaimin
la source
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.

Purna Pilla
la source
31
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Oxon
la source
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.

asuciu
la source
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.

Zachary Dow
la source
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))
d.popov
la source
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

Ignas Paplauskas
la source
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();
}
Milan
la source
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);
    });
Amit Kapoor
la source
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

Nitin Rawat
la source
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();
Jatin Patel
la source
5

Une autre façon de recharger la grille est

$("#GridName").getKendoGrid().dataSource.read();
vigne
la source
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

Kristy Kavada
la source
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);
})
oopsdazie
la source
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();
     }
}
AndyMcKenna
la source
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

Faran Shabbir
la source
3

Écrivez juste ci-dessous le code

$('.k-i-refresh').click();
user2951849
la source
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
$("#theidofthegrid").data("kendoGrid").dataSource.data([ ]);
Brownbagger11
la source
3

Vous pouvez essayer:

    $('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Kunvar Singh
la source
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>
sonyisda1
la source
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();
parvezalam khan
la source
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.

sajadre
la source
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.

jishuraajnath
la source
-2
$("#grd").data("kendoGrid").dataSource.read();
Islam Ashraful
la source
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.