Recarga / actualización de Kendo Grid


171

¿Cómo recargar o actualizar un Kendo Grid usando Javascript?

A menudo se requiere volver a cargar o actualizar una cuadrícula después de algún momento o después de una acción del usuario.

Respuestas:


314

Puedes usar

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

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

19
@zespri readsolicitará el servidor y volverá a cargar solo la fuente de datos de recarga. No habrá cambios en la interfaz de usuario. refreshvolverá a representar los elementos en la cuadrícula de la fuente de datos actual. Por eso se requieren ambos.
Botis

37
No creo que necesites la actualización en la última versión de Kendo. Como parece funcionar bien sin él
GraemeMiller

2
¡Si! Esto también funciona con TreeList: $ ('# Gantt'). Data ('kendoTreeList'). DataSource.read (); $ ('# Gantt'). Data ('kendoTreeList'). Refresh ();
Hernaldo Gonzalez

27
Los desarrolladores dicen explícitamente no llamar a la actualización después de leer: telerik.com/forums/show-progress-spinner-during-load-refresh porque puede evitar que aparezca el indicador de progreso.
Rustam Miftakhutdinov

2
Estoy usando una versión más nueva y solo tengo que llamar a .read. Llamar a .refresh después de la lectura provoca dos viajes al servidor para obtener datos.
Justin

59

Nunca me refresco.

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

solo funciona para mí todo el tiempo.


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

Gracias, pero esto produce el error "TypeError: $ (...). Data (...) is undefined". También busqué en muchas páginas y probé diferentes variaciones de esta solución, pero aún recibo el mismo error. ¿Alguna idea?
Jack

Si los datos ('kendoGrid') devuelven un valor nulo, lo más probable es que la identificación sea incorrecta o que aún no haya creado la cuadrícula. NB que hacen la rejilla con $ (..) kendoGrid () y acceder a ella más tarde con $ () de datos ( 'kendoGrid')..
tony

29

En un proyecto reciente, tuve que actualizar Kendo UI Grid en función de algunas llamadas, que estaban sucediendo en algunas selecciones desplegables. Esto es lo que terminé usando:

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

Esperemos que esto te ahorre algo de tiempo.


exactamente lo que estaba buscando grid.setDataSource (dataSource); para llamadas no remotas es lo que tiene que usar. ¡Gracias!
Rui Lima

15

Ninguna de estas respuestas obtiene el hecho de que readdevuelve una promesa, lo que significa que puede esperar a que se carguen los datos antes de llamar a actualizar.

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

Esto es innecesario si su captura de datos es instantánea / síncrona, pero lo más probable es que provenga de un punto final que no regrese de inmediato.


1
Aprovechar el soporte de promesa incorporado es realmente conveniente y eliminó algunas líneas de código también. Apostaría a que esta debería ser la verdadera respuesta.
FoxDeploy

1
Gracias zachary! He pasado un par de horas en este problema: su solución es la única que funcionó para mí. Estoy insertando filas en la fuente de mi base de datos de cuadrícula a través de ajax, en bucle (una fila a la vez). Una vez que finaliza el ciclo, dataSource.read () funcionó solo a veces. "entonces" es lo que necesitaba. ¡Muy apreciado!
Antony D

9

Si no desea tener una referencia a la cuadrícula en el controlador, puede usar este código:

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

Esto actualizará la cuadrícula, si hay un botón de actualización. El botón se puede habilitar así:

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

9

En realidad, son diferentes:

  • $('#GridName').data('kendoGrid').dataSource.read()actualiza los uidatributos de la fila de la tabla

  • $('#GridName').data('kendoGrid').refresh() deja el mismo uid


8

Lo que tiene que hacer es agregar un evento .Events (events => events.Sync ("KendoGridRefresh")) en su código de enlace kendoGrid. No es necesario escribir el código de actualización en el resultado 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" })          
  )

Y puede agregar la siguiente función Global en cualquiera de sus archivos .js. por lo tanto, puede llamarlo para todas las cuadrículas de kendo en su proyecto para actualizar el kendoGrid.

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

Actualice kendoGrid simplemente agregando Evento.
Milán

8

En mi caso, tenía una URL personalizada a la que ir cada vez; aunque el esquema del resultado seguiría siendo el mismo.
Usé lo siguiente:

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

Puedes usar las siguientes líneas

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

Para una función de actualización automática, eche un vistazo aquí


5

Al usar el siguiente código, llamó automáticamente al método de lectura de la cuadrícula y nuevamente llenó la cuadrícula

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

5

Una forma alternativa de recargar la red es

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

5

Siempre puedes usar $('#GridName').data('kendoGrid').dataSource.read();. Realmente no es necesario .refresh();después de eso, .dataSource.read();hará el truco.

Ahora, si desea actualizar su cuadrícula de una manera más angular, puede hacer:

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

vm.grid.dataSource.read();`

O

vm.gridOptions.dataSource.read();

Y no olvide declarar su fuente de datos como kendo.data.DataSourcetipo


5

Usé Jquery .ajax para obtener datos. Para volver a cargar los datos en la cuadrícula actual, necesito hacer lo siguiente:

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

4

Quiero volver a la página 1 cuando actualice la cuadrícula. Simplemente llamando a la función read () lo mantendrá en la página actual, incluso si los nuevos resultados no tienen tantas páginas. Llamar a .page (1) en el origen de datos actualizará el origen de datos Y volverá a la página 1, pero falla en las cuadrículas que no son paginables. Esta función maneja ambos:

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

Para realizar una actualización completa, donde la cuadrícula se volverá a representar junto con la nueva solicitud de lectura, puede hacer lo siguiente:

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

Donde la propiedad puede ser cualquier propiedad, por ejemplo, ordenable


3

Solo escribe debajo del código

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

1
Esto sería cierto solo si ha inicializado la cuadrícula con pageable.refresh = true ... que no es por defecto. De todos modos, no debe usar una solución de IU cuando pueda hacerlo utilizando una función API (vea la respuesta aceptada)
The_Black_Smurf


3

Puedes probar:

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

3

Si desea que la cuadrícula se actualice automáticamente en forma cronometrada, puede usar el siguiente ejemplo que tiene el intervalo establecido en 30 segundos:

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

2

La configuración / datos predeterminados / actualizados de los widgets se configura para vincularse automáticamente a un DataSource asociado.

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

¿Hubo algún problema con la respuesta aceptada (desde 2013), ya que su respuesta es muy similar? Al menos debe comentar que de alguna manera - y los comentarios en esa respuesta incluso decir que no se debe llamarrefresh
James Z

2

También puede actualizar su grilla enviando nuevos parámetros a la acción Leer y configurando las páginas a su gusto:

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

En este ejemplo, la acción de lectura de la cuadrícula se llama mediante el valor de 2 parámetros y después de obtener el resultado, la paginación de la cuadrícula se encuentra en la página 1.


1

La forma más fácil de actualizar es usar la función refresh (). Que dice así:

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

aunque también puede actualizar la fuente de datos con este comando:

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

Este último vuelve a cargar la fuente de datos de la cuadrícula. El uso de ambos se puede hacer de acuerdo a sus necesidades y requerimientos.


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

Si bien esto es al menos no 1to1 copiar y pegar, no proporciona información adicional. Casi todas las respuestas en esta publicación con más de un voto a favor recomienda usardataSource.read()
Fabian N.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.