Перезагрузка / обновление Kendo Grid

171

Как перезагрузить или обновить Kendo Grid, используя Javascript?

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

Oxon
источник

Ответы:

314

Ты можешь использовать

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

$('#GridName').data('kendoGrid').refresh(); <!--  refresh current UI -->
Jaimin
источник
19
@zespri readзапросит сервер и перезагрузит только перезагрузку источника данных. Там не будет никаких изменений в пользовательском интерфейсе. refreshбудет повторно визуализировать элементы в сетке из текущего источника данных. Вот почему оба требуются.
Botis
37
Я не думаю, что вам нужно обновить в последней версии Кендо. Как кажется, без него нормально работает
GraemeMiller
2
Да! Эта работа также с TreeList: $ ('# Gantt'). Data ('kendoTreeList'). DataSource.read (); $ ( '# Ганта') данные ( 'kendoTreeList') обновления ()..;
Эрнальдо Гонсалес
27
Разработчики прямо говорят, что не следует вызывать обновление после прочтения: telerik.com/forums/show-progress-spinner-during-load-refresh, поскольку это может помешать появлению индикатора прогресса.
Рустам Мифтахутдинов
2
Я использую более новую версию, и мне нужно только позвонить .read. Вызов .refresh после чтения вызывает две поездки на сервер для данных.
Джастин
59

Я никогда не освежаю.

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

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

Пурна Пилла
источник
31
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Oxon
источник
Спасибо, но это выдает ошибку «TypeError: $ (...). Data (...) не определена». Я также посмотрел на многих страницах и попробовал различные варианты этого решения, но все равно получаю ту же ошибку. Любая идея?
Джек
Если data ('kendoGrid') возвращает null, то, скорее всего, либо ID неверен, либо вы еще не создали сетку. Обратите внимание, что вы делаете сетку с помощью $ (..). KendoGrid () и обращаетесь к ней позже с помощью $ (). Data ('kendoGrid')
Тони
29

В недавнем проекте мне приходилось обновлять сетку интерфейса пользователя Kendo на основе некоторых вызовов, которые происходили при некоторых выпадающих списках. Вот что я в итоге использовал:

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

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

asuciu
источник
именно то, что я искал grid.setDataSource (dataSource); для не удаленных вызовов это то, что вы должны использовать. Спасибо!
Руи Лима
15

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

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

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

Захари Доу
источник
1
Использование встроенной поддержки обещаний действительно удобно и убрало несколько строк кода. Держу пари, что это будет верный ответ.
FoxDeploy
1
Спасибо, Захария! Я потратил пару часов на эту проблему - ваше решение - единственное, которое сработало для меня. Я вставляю строки в мой источник базы данных сетки через зацикленный цикл (по одной строке за раз). После окончания цикла dataSource.read () работал только иногда. «тогда» это то, что мне было нужно. Очень признателен!
Антоний Д
9

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

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

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

[MVC GRID DECLARATION].Pageable(p=> p.Refresh(true))
d.popov
источник
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. Таким образом, вы можете вызвать его для всех сеток кендо в вашем проекте, чтобы обновить kendoGrid.

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

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

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

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

Нитин Рават
источник
5

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

$('#GridName').data('kendoGrid').dataSource.read();
Джатин Патель
источник
5

Альтернативный способ перезагрузить сетку

$("#GridName").getKendoGrid().dataSource.read();
vineel
источник
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);
})
oopsdazie
источник
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();
     }
}
AndyMcKenna
источник
4

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

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

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

Фаран Шаббир
источник
3

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

$('.k-i-refresh').click();
user2951849
источник
1
Это будет верно только в том случае, если вы инициализировали сетку с pageable.refresh = true ..., который не по умолчанию. В любом случае, вы не должны использовать обходной путь пользовательского интерфейса, когда вы можете сделать это с помощью функции API (см. Принятый ответ)
The_Black_Smurf
3
$("#theidofthegrid").data("kendoGrid").dataSource.data([ ]);
Brownbagger11
источник
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>
sonyisda1
источник
2

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

$('#GridId').data('kendoGrid').dataSource.read();
$('#GridId').data('kendoGrid').refresh();
хан парвезалам
источник
Было ли что-то не так с принятым ответом (с 2013 года), поскольку ваш ответ выглядит так похоже. Вы должны хотя бы прокомментировать это каким-то образом - а комментарии в этом ответе даже говорят, что вам не следует звонитьrefresh
Джеймс З
2

Вы также можете обновить свою сетку, отправив новые параметры в действие «Чтение» и установив нужные страницы:

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

В этом примере действие чтения сетки вызывается значением 2 параметров, и после получения результата разбиение сетки происходит на странице 1.

sajadre
источник
1

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

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

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

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

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

jishuraajnath
источник
-2
$("#grd").data("kendoGrid").dataSource.read();
Ашрафул Ислам
источник
Хотя это, по крайней мере, не копирование 1to1, оно не предоставляет никакой дополнительной информации. Почти каждый ответ в этом посте с более чем одним голосом рекомендуется использоватьdataSource.read()
Фабиан Н.