Kendo Grid'i yeniden yükleme / yenileme


171

Javascript kullanarak Kendo Izgarası nasıl yeniden yüklenir veya yenilenir?

Bir ızgarayı bir süre sonra veya bir kullanıcı işleminden sonra yeniden yüklemek veya yenilemek genellikle gereklidir.

Yanıtlar:


314

Kullanabilirsiniz

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

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

19
@zespri readsunucuyu isteyecek ve sadece veri kaynağını yeniden yükleyecektir . Kullanıcı arayüzünde değişiklik olmayacak. refreshızgaradaki öğeleri geçerli veri kaynağından yeniden oluşturur. Bu yüzden her ikisi de gereklidir.
Botis

37
Kendo'nun son sürümünde yenilemeye ihtiyacınız olduğunu düşünmüyorum. Onsuz iyi çalışıyor gibi görünüyor
GraemeMiller

2
Evet! Bu, TreeList ile de çalışır: $ ('# Gantt'). Data ('kendoTreeList'). DataSource.read (); $ ( '# Gantt') verileri ( 'kendoTreeList') yenilemek ()..;
Hernaldo Gonzalez

27
Geliştiriciler açıkça okuduktan sonra yenileme çağrılmamasını söylüyorlar: telerik.com/forums/show-progress-spinner-during-load-refresh, çünkü ilerleme göstergesinin görünmesini engelleyebilir.
Rustam Miftakhutdinov

2
Daha yeni bir sürüm kullanıyorum ve sadece .read'i çağırmam gerekiyor. Okunduktan sonra .refresh çağrıldığında veri için sunucuya iki sefer yapılır.
Justin

59

Asla tazelenmem.

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

Yalnız benim için her zaman çalışır.


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

Teşekkürler, ancak bu "TypeError: $ (...). Data (...) undefined" hatası verir. Ayrıca birçok sayfaya baktım ve bu çözümün farklı varyasyonlarını denedim, ancak yine de aynı hatayı alıyorum. Herhangi bir fikir?
Jack

Veri ('kendoGrid') null değerini döndürürse, büyük olasılıkla kimlik yanlıştır veya henüz ızgarayı oluşturmadınız. Not $ (..). KendoGrid () ile ızgara yaparsınız ve daha sonra $ () ile veriye erişirsiniz ('kendoGrid')
tony

29

Son zamanlarda yapılan bir projede, Kendo UI Grid'i bazı çağrılara dayanarak güncellemem gerekti, bazı açılır seçimlerde gerçekleşti. İşte ben kullanarak sona erdi:

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

Umarım bu size biraz zaman kazandıracaktır.


tam olarak ne ben grid.setDataSource (dataSource) aradılar; uzaktan olmayan aramalar için kullanmanız gereken şey budur. Teşekkürler!
Rui Lima

15

Bu cevaplardan tek bir kişi readbir söz vermez, yani yenilemeyi çağırmadan önce verilerin yüklenmesini bekleyebilirsiniz.

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

Veri yakalamanız anlık / senkronize ise bu gereksizdir, ancak büyük olasılıkla hemen geri dönmeyecek bir uç noktadan geliyorsa.


1
Yerleşik vaat desteğinden yararlanmak gerçekten kullanışlı ve birkaç satır kod da kaldırıldı. Bunun gerçek cevap olması gerektiğini iddia ediyorum.
1919'da FoxDeploy

1
Teşekkürler Zachary! Bu sorun için birkaç saat geçirdim - çözümünüz benim için çalışan tek çözümdü. Döngü (her seferinde bir satır) ajax aracılığıyla benim ızgara veritabanı kaynağına satır ekliyorum. Döngü bittikten sonra dataSource.read () yalnızca bazen çalıştı. İhtiyacım olan "o zaman". Çok takdir!
Antony D

9

İşleyicideki ızgaraya başvuru yapmak istemiyorsanız, bu kodu kullanabilirsiniz:

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

Yenile düğmesi varsa ızgarayı yenileyecektir. Düğme şu şekilde etkinleştirilebilir:

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

9

Aslında farklılar:

  • $('#GridName').data('kendoGrid').dataSource.read()uidtablo satırının niteliklerini yeniler

  • $('#GridName').data('kendoGrid').refresh() aynı kullanıcı adını bırakır


8

Ne yapmanız gereken sadece bir olay ekleyin .Events (etkinlikler => events.Sync ( "KendoGridRefresh")) Ajax sonucu yenile kod yazmak kendoGrid bağlayıcı code.No muhtaç.

@(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" })          
  )

Ve aşağıdaki Global işlevini .js dosyanızın herhangi birine ekleyebilirsiniz. böylece, kendoGrid'i yenilemek için projenizdeki tüm kendo ızgaraları için arayabilirsiniz.

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

Sadece Event'i ekleyerek kendoGrid'i yenileyin.
Milano

8

Benim durumumda her zaman gitmek için özel bir url vardı; ancak sonucun şeması aynı kalacaktır.
Aşağıdakileri kullandım:

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

Aşağıdaki satırları kullanabilirsiniz

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

Otomatik yenileme özelliği için buraya bir göz atın


5

Aşağıdaki kodu kullanarak otomatik olarak ızgaranın okuma yöntemi denir ve yeniden ızgara doldur

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

5

Izgarayı yeniden yüklemenin alternatif bir yolu

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

5

Her zaman kullanabilirsiniz $('#GridName').data('kendoGrid').dataSource.read();. Bundan .refresh();sonra gerçekten gerek .dataSource.read();yok, hile yapacak.

Şimdi ızgaralarınızı daha açısal bir şekilde yenilemek istiyorsanız şunları yapabilirsiniz:

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

vm.grid.dataSource.read();`

VEYA

vm.gridOptions.dataSource.read();

Ve veri kaynağınızı kendo.data.DataSourcetür olarak bildirmeyi unutmayın


5

Veri almak için Jquery .ajax kullandım. Verileri geçerli ızgaraya yeniden yüklemek için aşağıdakileri yapmam gerekir:

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

4

Izgarayı yenilediğimde 1. sayfaya geri dönmek istiyorum. Yeni sonuçların çok fazla sayfası olmasa bile, sadece read () işlevini çağırmak sizi geçerli sayfada tutar. Veri kaynağında .page (1) çağrıldığında veri kaynağı yenilenir VE sayfa 1'e dönülür ancak ödenmeyen ızgaralarda başarısız olur. Bu işlev her ikisini de ele alır:

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

Kılavuzun yeni okuma isteği ile yeniden oluşturulacağı tam bir yenileme yapmak için aşağıdakileri yapabilirsiniz:

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

Mülk herhangi bir mülk olduğunda, örneğin sıralanabilir


3

Sadece kodun altına yazın

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

1
Bu, yalnızca ızgarayı varsayılan olarak olmayan bir pageable.refresh = true ... ile başlattıysanız doğrudur. Her neyse, bir API işlevi kullanarak yapabileceğiniz bir UI geçici çözümü kullanmamalısınız (kabul edilen cevaba bakın)
The_Black_Smurf


3

Deneyebilirsiniz:

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

3

Izgaranın zamanlanmış olarak otomatik olarak yenilenmesini istiyorsanız, aralığı 30 saniyeye ayarlanmış olan aşağıdaki örneği kullanabilirsiniz:

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

2

Widget'ların varsayılan / güncellenmiş yapılandırması / verileri, ilişkilendirilmiş bir Veri Kaynağına otomatik olarak bağlanacak şekilde ayarlanmıştır.

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

Cevabınız çok benzer göründüğünden, kabul edilen cevapta (2013'ten itibaren) bir sorun mu var? En azından bir şekilde yorum yapmalısınız - ve bu cevaptaki yorumlar bile refresh
James Z

2

Ayrıca Izgarayı Okuma eylemine yeni parametreler göndererek ve sayfaları istediğiniz gibi ayarlayarak yenileyebilirsiniz:

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

Bu örnekte, ızgaranın okuma eylemi 2 parametre değeri ile çağrılmaktadır ve sonuç alındıktan sonra ızgaranın sayfalaması sayfa 1'de yer almaktadır.


1

Yenilemenin en kolay yolu refresh () işlevini kullanmaktır. Hangi gibi gider:

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

bu komutu kullanarak veri kaynağını da yenileyebilirsiniz:

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

İkincisi aslında ızgaranın veri kaynağını yeniden yükler. Her ikisinin kullanımı ihtiyacınıza ve gereksiniminize göre yapılabilir.


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

Bu en az 1'e 1 kopya yapıştırma olsa da, ek bilgi sağlamaz. Bu yazıdaki hemen hemen her cevap birden fazla oylama kullanılmasıyla öneriliyordataSource.read()
Fabian N.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.