Перезагрузка / обновление сетки кендо



Как перезагрузить или обновить сетку кендо с помощью Javascript?



часто требуется перезагрузить или обновить сетку через некоторое время или после действия пользователя.

589   23  

23 ответов:

можно использовать

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

Я никогда не обновляю .

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

один работает для меня все время.

$('#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);
    });

надеюсь, это сэкономит вам некоторое время.

Если вы не хотите иметь ссылку на таблицу в обработчик, вы можете использовать этот код:

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

это обновит сетку, если есть кнопка Обновить. Кнопка может быть включена следующим образом:

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

что вам нужно сделать, это просто добавить событие .События(события => события.Sync ("KendoGridRefresh")) в ваш код привязки kendoGrid.Не нужно писать код "обновить" в результате "Аякс".

@(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 файл. таким образом, вы можете вызвать его для всех сеток кендо в вашем проекте, чтобы обновить kendoGrid.

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() обновление uid атрибуты строки таблицы

  • $('#GridName').data('kendoGrid').refresh() оставляет тот же uid

вы можете использовать следующие строки

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

для функции автоматического обновления посмотреть здесь

используя следующий код, он автоматически вызывал метод чтения сетки и снова заполнял сетку

$('#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 тип

я использовал Jquery .AJAX для получения данных. Для того, чтобы перезагрузить данные в текущую сетку, мне нужно сделать следующее:

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

ни один из этих ответов становится тот факт, что read возвращает обещание, которое означает, что вы можете дождаться загрузки данных перед вызовом обновления.

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

это не нужно, если ваш захват данных является мгновенным / синхронным, но более чем вероятно, что он исходит от конечной точки, которая не вернется немедленно.

Я хочу вернуться на страницу 1, Когда я обновляю сетку. Просто вызов функции read () позволит вам оставаться на текущей странице, даже если в новых результатах не так много страниц. Зовущий.Страница (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
    });

где свойство может быть любым свойством, например sortable

просто напишите ниже код

$('.k-i-refresh').click();
$("#theidofthegrid").data("kendoGrid").dataSource.data([ ]);

по умолчанию / обновленная конфигурация / данные виджетов автоматически привязываются к соответствующему источнику данных.

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

можно попробовать:

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

Если вы хотите, чтобы сетка автоматически обновлялась по времени, вы можете использовать следующий пример, который имеет интервал, установленный в 30 секунд:

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

самый простой способ обновления-использовать функцию refresh (). Который идет как:

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

в то время как вы также можете обновить источник данных с помощью этой команды:

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

последний фактически перезагружает источник данных сетки. Использование обоих может быть сделано в соответствии с вашими потребностями и требованиями.

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

Comments

    Ничего не найдено.