【发布时间】:2013-08-26 07:50:13
【问题描述】:
如何使用 Javascript 重新加载或刷新 Kendo Grid?
通常需要在某个时间或用户操作之后重新加载或刷新网格。
【问题讨论】:
标签: kendo-ui kendo-grid
如何使用 Javascript 重新加载或刷新 Kendo Grid?
通常需要在某个时间或用户操作之后重新加载或刷新网格。
【问题讨论】:
标签: kendo-ui kendo-grid
你可以使用
$('#GridName').data('kendoGrid').dataSource.read(); <!-- first reload data source -->
$('#GridName').data('kendoGrid').refresh(); <!-- refresh current UI -->
【讨论】:
read 将请求服务器并重新加载仅重新加载数据源。 UI 不会有任何变化。 refresh 将从当前数据源重新渲染网格中的项目。这就是为什么两者都是必需的。
我从不刷新。
$('#GridName').data('kendoGrid').dataSource.read();
一个人总是为我工作。
【讨论】:
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
【讨论】:
在最近的一个项目中,我不得不根据一些调用更新 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);
});
希望这会为您节省一些时间。
【讨论】:
这些答案中没有一个得到read返回承诺的事实,这意味着您可以在调用刷新之前等待数据加载。
$('#GridId').data('kendoGrid').dataSource.read().then(function() {
$('#GridId').data('kendoGrid').refresh();
});
如果您的数据抓取是即时/同步的,则这是不必要的,但很可能它来自不会立即返回的端点。
【讨论】:
如果您不想在处理程序中引用网格,可以使用以下代码:
$(".k-pager-refresh").trigger('click');
如果有刷新按钮,这将刷新网格。 该按钮可以像这样启用:
[MVC GRID DECLARATION].Pageable(p=> p.Refresh(true))
【讨论】:
其实它们是不同的:
$('#GridName').data('kendoGrid').dataSource.read()刷新表格行的uid属性
$('#GridName').data('kendoGrid').refresh() 保留相同的 uid
【讨论】:
你所要做的就是添加一个事件 .Events(events => events.Sync("KendoGridRefresh")) 在您的 kendoGrid 绑定代码中。无需在 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" })
)
您可以在任何 .js 文件中添加以下全局函数。因此,您可以为项目中的所有剑道网格调用它来刷新剑道网格。
function KendoGridRefresh() {
var grid = $('#document').data('kendoGrid');
grid.dataSource.read();
}
【讨论】:
在我的情况下,我每次都有一个自定义网址;尽管结果的架构将保持不变。
我使用了以下内容:
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);
});
【讨论】:
我使用 Jquery .ajax 来获取数据。为了将数据重新加载到当前网格中,我需要执行以下操作:
.success (function (result){
$("#grid").data("kendoGrid").dataSource.data(result.data);
})
【讨论】:
您可以使用以下几行
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
有关自动刷新功能,请查看here
【讨论】:
通过使用以下代码,它会自动调用网格的读取方法并再次填充网格
$('#GridName').data('kendoGrid').dataSource.read();
【讨论】:
另一种重新加载网格的方法是
$("#GridName").getKendoGrid().dataSource.read();
【讨论】:
您始终可以使用$('#GridName').data('kendoGrid').dataSource.read();。之后你真的不需要.refresh();,.dataSource.read(); 就可以了。
现在,如果您想以更角度的方式刷新您的网格,您可以这样做:
<div kendo-grid="vm.grid" id="grid" options="vm.gridOptions"></div>
vm.grid.dataSource.read();`
或
vm.gridOptions.dataSource.read();
别忘了将你的数据源声明为kendo.data.DataSource 类型
【讨论】:
我想在刷新网格时返回第 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();
}
}
【讨论】:
为了进行完整的刷新,网格将与新的读取请求一起重新渲染,您可以执行以下操作:
Grid.setOptions({
property: true/false
});
属性可以是任何属性,例如可排序
【讨论】:
你可以试试:
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
【讨论】:
只写下面的代码
$('.k-i-refresh').click();
【讨论】:
$("#theidofthegrid").data("kendoGrid").dataSource.data([ ]);
【讨论】:
如果您希望网格定时自动刷新,您可以使用以下示例,将时间间隔设置为 30 秒:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
setInterval(function () {
var grid = $("#GridName").data("kendoGrid");
grid.dataSource.read();
}, 30000);
});
</script>
【讨论】:
您还可以通过将新参数发送到读取操作并将页面设置为您喜欢的内容来刷新您的网格:
var ds = $("#gridName").data("kendoGrid").dataSource;
ds.options.page = 1;
var parameters = {
id: 1
name: 'test'
}
ds.read(parameters);
在此示例中,网格的读取操作由 2 个参数值调用,在获得结果后,网格的分页位于第 1 页。
【讨论】:
小部件的默认/更新配置/数据设置为自动绑定到关联的数据源。
$('#GridId').data('kendoGrid').dataSource.read();
$('#GridId').data('kendoGrid').refresh();
【讨论】:
refresh
最简单的刷新方法是使用 refresh() 函数。 就像:
$('#gridName').data('kendoGrid').refresh();
虽然您也可以使用此命令刷新数据源:
$('#gridName').data('kendoGrid').dataSource.read();
后者实际上是重新加载网格的数据源。两者的使用可以根据您的需要和要求来完成。
【讨论】:
我看到这里的很多答案都建议同时调用dataSource.read 和grid.refresh,但是,网格在内部侦听数据源的更改,并在更改时自行刷新。换句话说,同时执行dataSource.read 和grid.refresh 将导致两次刷新网格,这是不必要的。只需拨打dataSource.read 就足够了。
【讨论】:
我的解决办法是:
var gridObj = $('#GridName').data('kendoGrid');
gridObj.dataSource.read();
gridObj.refresh();
也适用于其他对象函数
【讨论】:
$("#grd").data("kendoGrid").dataSource.read();
【讨论】:
dataSource.read() 推荐了这篇文章中几乎每个答案都有不止一个赞成票
$('#GridName').data('kendoGrid').dataSource.read(); //首先你必须读取数据源数据 $('#GridName').data('kendoGrid').refresh(); // 之后就可以刷新了
【讨论】: