剣道グリッドの再読み込み/更新


171

JavaScriptを使用して剣道グリッドをリロードまたはリフレッシュする方法は?

多くの場合、しばらくしてから、またはユーザーの操作の後に、グリッドを再ロードまたは更新する必要があります。

回答:


314

使用できます

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

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

19
@zespri readはサーバーをリクエストし、データソースのみをリロードします。UIに変更はありません。refresh現在のデータソースからグリッド内のアイテムを再レンダリングします。そのため、両方が必要です。
Botis 14

37
剣道の最新版ではリフレッシュは必要ないと思います。それなしでも問題なく動作するようです
GraemeMiller 2014年

2
うん!これはTreeListでも機能します:$( '#Gantt')。data( 'kendoTreeList')。dataSource.read(); $( '#Gantt')。data( 'kendoTreeList')。refresh();
Hernaldo Gonzalez、2015

27
開発者は、読み込み後に更新を呼び出さないことを明示的に言っています:telerik.com/forums/show-progress-spinner-during-load-refresh進行状況インジケーターが表示されない可能性があるためです。
Rustam Miftakhutdinov 2015年

2
新しいバージョンを使用しており、.readを呼び出すだけで済みます。読み取り後に.refreshを呼び出すと、データをサーバーに2回送信します。
ジャスティン

59

私はリフレッシュすることはありません。

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

一人でいつもうまくいきます。


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

おかげで、これは「TypeError:$(...)。data(...)is undefined」エラーを発生させます。また、私は多くのページを調べ、このソリューションのさまざまなバリエーションを試しましたが、それでも同じエラーが発生します。何か案が?
ジャック・

data( 'kendoGrid')がnullを返す場合、IDが間違っているか、グリッドをまだ作成していない可能性があります。注:$(..)。kendoGrid()を使用してグリッドを作成し、後で$()。data( 'kendoGrid')を使用してグリッドにアクセスします
tony

29

最近のプロジェクトでは、いくつかのドロップダウン選択で発生していたいくつかの呼び出しに基づいて、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);
    });

うまくいけば、これにより時間を節約できます。


まさに私が探していたgrid.setDataSource(dataSource); 非リモートコールの場合は、これを使用する必要があります。ありがとう!
Rui Lima

15

これらの答えのどれもreadが、promise を返すという事実を得ません。つまり、データがロードされるのを待ってから、refreshを呼び出すことができます。

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

データグラブがインスタント/同期の場合、これは不要ですが、すぐに返されないエンドポイントからのものである可能性が高いです。


1
組み込みのpromiseサポートを利用すると本当に便利で、数行のコードも削除されます。これが本当の答えであるべきだと私は賭けます。
FoxDeploy

1
ザカリーありがとう!私はこの問題に数時間を費やしました-あなたの解決策が私のために働いた唯一のものです。ループしたajaxを介してグリッドデータベースソースに行を挿入しています(一度に1行)。ループが終了した後、dataSource.read()はたまにしか機能しませんでした。「それから」は私が必要としたものです。とても有難い!
アントニーD

9

ハンドラーのグリッドへの参照が必要ない場合は、次のコードを使用できます。

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

更新ボタンがある場合、これはグリッドを更新します。ボタンは次のように有効にすることができます:

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

9

実際には、それらは異なります:

  • $('#GridName').data('kendoGrid').dataSource.read()uidテーブル行の属性を更新します

  • $('#GridName').data('kendoGrid').refresh() 同じuidを残す


8

必要なのは、イベント .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();
}

イベントを追加するだけでkendoGridを更新します。
ミラノ

8

私の場合、毎回アクセスするカスタム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);
    });


5

以下のコードを使用することにより、グリッドのreadメソッドを自動的に呼び出し、グリッドを再び塗りつぶします

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

5

グリッドをリロードする別の方法は

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

5

いつでも使用できます$('#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タイプとして宣言することを忘れないでください


5

Jquery .ajaxを使用してデータを取得しました。現在のグリッドにデータをリロードするには、次のことを行う必要があります。

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

4

グリッドを更新したら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();
     }
}

4

グリッドが新しい読み取り要求と共に再レンダリングされる完全な更新を行うには、次の操作を実行できます。

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

プロパティは任意のプロパティにすることができます(例:ソート可能)


3

コードの下に書くだけ

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

1
これは、pageable.refresh = true ...でグリッドを初期化した場合にのみ当てはまります。デフォルトではそうではありません。とにかく、API関数を使用してUIの回避策を実行できる場合(承認された回答を参照)
The_Black_Smurf


3

あなたは試すことができます:

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

3

グリッドが時間ベースで自動的に更新されるようにしたい場合は、間隔を30秒に設定した次の例を使用できます。

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

2

ウィジェットのデフォルト/更新された構成/データは、関連するDataSourceに自動的にバインドするように設定されています。

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

回答が非常に似ているため、承認された回答(2013年から)に問題がありましたか?少なくとも何らかの方法でコメントする必要があります。また、その回答のコメントには、電話をかけるべきではないとさえ言っていますrefresh
James Z

2

新しいパラメーターを読み取りアクションに送信し、ページを好きなように設定して、グリッドを更新することもできます。

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

この例では、グリッドの読み取りアクションが2つのパラメーター値によって呼び出され、結果を取得した後、グリッドのページングは​​1ページ目にあります。


1

リフレッシュする最も簡単な方法は、refresh()関数を使用することです。それは次のようになります:

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

このコマンドを使用してデータソースを更新することもできます。

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

後者は実際にはグリッドのデータソースを再ロードします。両方の使用は、ニーズと要件に応じて行うことができます。


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

これは少なくとも1対1のコピーペーストではありませんが、追加情報はありません。この投稿のほぼすべての回答で、1つ以上の賛成投票を使用することをお勧めしますdataSource.read()
Fabian N.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.