重新加载/刷新Kendo Grid

Oxo*_*xon 162 kendo-ui kendo-grid

如何使用Javascript重新加载或刷新Kendo Grid?

通常需要在某个时间之后或在用户操作之后重新加载或刷新网格.

Jai*_*min 301

您可以使用

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

$('#GridName').data('kendoGrid').refresh(); <!--  refresh current UI -->
Run Code Online (Sandbox Code Playgroud)

  • 我认为你不需要在最新版本的剑道中刷新.因为没有它它似乎工作正常 (36认同)
  • 开发人员明确表示在阅读后不要调用刷新:http://www.telerik.com/forums/show-progress-spinner-during-load-refresh因为它可能会阻止进度指示器出现. (27认同)
  • @zespri`read`将请求服务器并重新加载**仅**重新加载数据源.用户界面不会有任何变化.`refresh`将从当前数据源重新呈现网格中的项目.这就是为什么两者都是必需的. (19认同)
  • `refresh`是做什么的(而不是单独的`read`)? (14认同)
  • 是的 这也适用于TreeList:$('#Gantt')。data('kendoTreeList')。dataSource.read(); $('#Gantt')。data('kendoTreeList')。refresh(); (2认同)
  • 我使用的是较新版本,我只需要致电.read。读取后调用.refresh导致两次访问服务器以获取数据。 (2认同)

小智 57

我从不刷新.

$('#GridName').data('kendoGrid').dataSource.read();
Run Code Online (Sandbox Code Playgroud)

一直对我有用.

  • 我同意,阅读后你会感到神清气爽. (2认同)

Oxo*_*xon 30

$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Run Code Online (Sandbox Code Playgroud)


asu*_*ciu 24

在最近的一个项目中,我不得不根据一些调用来更新Kendo UI Grid,这些调用是在一些下拉选项上发生的.以下是我最终使用的内容:

$.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);
    });
Run Code Online (Sandbox Code Playgroud)

希望这能为您节省一些时间.

  • setDataSource()为我做了诀窍.谢谢! (2认同)

Zac*_*Dow 12

这些答案中没有一个得到read返回promise 的事实,这意味着您可以在调用refresh之前等待数据加载.

$('#GridId').data('kendoGrid').dataSource.read().then(function() {
    $('#GridId').data('kendoGrid').refresh();
});
Run Code Online (Sandbox Code Playgroud)

如果您的数据抓取是即时/同步的,那么这是不必要的,但很可能它来自不会立即返回的端点.

  • 利用内置的 Promise 支持非常方便,并且还删除了几行代码。我敢打赌这应该是真正的答案。 (2认同)
  • 谢谢扎卡里!我在这个问题上花了几个小时 - 你的解决方案是唯一对我有用的解决方案。我正在通过 ajax 循环(一次一行)将行插入到网格数据库源中。循环完成后 dataSource.read() 仅有时有效。“然后”就是我所需要的。非常感激! (2认同)

d.p*_*pov 8

如果您不想在处理程序中引用网格,则可以使用以下代码:

 $(".k-pager-refresh").trigger('click');
Run Code Online (Sandbox Code Playgroud)

如果有刷新按钮,这将刷新网格.可以像这样启用按钮:

[MVC GRID DECLARATION].Pageable(p=> p.Refresh(true))
Run Code Online (Sandbox Code Playgroud)


小智 8

实际上,他们是不同的:

  • $('#GridName').data('kendoGrid').dataSource.read()刷新uid表行的属性

  • $('#GridName').data('kendoGrid').refresh() 留下同样的uid


Ami*_*oor 7

在我的情况下,我每次都有一个自定义网址; 虽然结果的模式将保持不变.
我使用了以下内容:

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);
    });
Run Code Online (Sandbox Code Playgroud)


Mil*_*lan 6

你要做的就是 在你的kendoGrid绑定代码中添加一个事件 .Events(events => events.Sync("KendoGridRefresh")).不需要在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" })          
  )
Run Code Online (Sandbox Code Playgroud)

并且您可以在任何.js文件中添加以下全局函数.因此,您可以为项目中的所有kendo网格调用它来刷新kendoGrid.

function KendoGridRefresh() {
    var grid = $('#document').data('kendoGrid');
    grid.dataSource.read();
}
Run Code Online (Sandbox Code Playgroud)


And*_*nna 6

我想在刷新网格时返回到第 1 页。只需调用 read() 函数即可使您保持在当前页面,即使新结果没有那么多页面。在数据源上调用 .page(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();
     }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用以下几行

$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Run Code Online (Sandbox Code Playgroud)

有关自动刷新功能,请查看此处


小智 5

通过使用以下代码,它会自动调用网格的读取方法并再次填充网格

$('#GridName').data('kendoGrid').dataSource.read();
Run Code Online (Sandbox Code Playgroud)


vin*_*eel 5

重新加载网格的另一种方法是

$("#GridName").getKendoGrid().dataSource.read();
Run Code Online (Sandbox Code Playgroud)


Kri*_*ada 5

您始终可以使用$('#GridName').data('kendoGrid').dataSource.read();. 你真的不需要.refresh();在那之后,.dataSource.read();会做的伎俩。

现在,如果您想以更有角度的方式刷新网格,您可以执行以下操作:

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

vm.grid.dataSource.read();`
Run Code Online (Sandbox Code Playgroud)

或者

vm.gridOptions.dataSource.read();
Run Code Online (Sandbox Code Playgroud)

并且不要忘记将您的数据源声明为kendo.data.DataSource类型


oop*_*zie 5

我使用Jquery .ajax来获取数据。为了将数据重新加载到当前网格中,我需要执行以下操作:

.success (function (result){
    $("#grid").data("kendoGrid").dataSource.data(result.data);
})
Run Code Online (Sandbox Code Playgroud)