回答:
使用できます
$('#GridName').data('kendoGrid').dataSource.read(); <!-- first reload data source -->
$('#GridName').data('kendoGrid').refresh(); <!-- refresh current UI -->
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
最近のプロジェクトでは、いくつかのドロップダウン選択で発生していたいくつかの呼び出しに基づいて、Kendo UIグリッドを更新する必要がありました。これが私が最終的に使用したものです:
$.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
が、promise を返すという事実を得ません。つまり、データがロードされるのを待ってから、refreshを呼び出すことができます。
$('#GridId').data('kendoGrid').dataSource.read().then(function() {
$('#GridId').data('kendoGrid').refresh();
});
データグラブがインスタント/同期の場合、これは不要ですが、すぐに返されないエンドポイントからのものである可能性が高いです。
実際には、それらは異なります:
$('#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();
}
私の場合、毎回アクセスするカスタムURLがありました。結果のスキーマは同じままですが。
私は以下を使用しました:
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);
});
以下の行を使用できます
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
自動更新機能については、こちらをご覧ください
いつでも使用できます$('#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();
}
}
コードの下に書くだけ
$('.k-i-refresh').click();
リフレッシュする最も簡単な方法は、refresh()関数を使用することです。それは次のようになります:
$('#gridName').data('kendoGrid').refresh();
このコマンドを使用してデータソースを更新することもできます。
$('#gridName').data('kendoGrid').dataSource.read();
後者は実際にはグリッドのデータソースを再ロードします。両方の使用は、ニーズと要件に応じて行うことができます。
$("#grd").data("kendoGrid").dataSource.read();
dataSource.read()
read
はサーバーをリクエストし、データソースのみをリロードします。UIに変更はありません。refresh
現在のデータソースからグリッド内のアイテムを再レンダリングします。そのため、両方が必要です。