Мне нужно перезагрузить всю сетку (не только данные).

Я пытаюсь:

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

Но read() перезагружает только данные, а refresh() не работает. Когда пользователь нажимает кнопку, мне нужно воссоздать всю таблицу с новыми столбцами (я не знаю, сколько столбцов или какие столбцы, сервер обрабатывает это).

Пользователи могут изменять столбцы, которые они видят, с помощью флажка html. В первый раз таблица заряжается правильно, но если пользователь изменяет значение флажка, столбцы не меняются. Если отменить выбор параметра, столбец станет пустым, а если пользователь добавит параметр, новый столбец не появится.

Как я могу этого добиться?

2
Rabegi 13 Мар 2018 в 19:30

2 ответа

Лучший ответ

Вы должны уничтожить и воссоздать сетку, чтобы изменить столбцы.

$.ajax(
{
    type: 'GET',
    url: yourURL,
    dataType: 'json',
    success: function (result) {
        $('#Grid').data('kendoGrid').destroy();
        $('#Grid').empty(); //necessary to remove the old html

        $("#grid").kendoGrid({
            dataSource: {
                data: result,
                schema: {
                    data: "d"
                }
            }
        });
    }
});

Результат вашего ajax должен быть примерно таким:

var result = { 'd': [
    { description: "Description 1", number: 30, price: 3.5 },
    { description: "Description 2", number: 33, price: 4 },
    { description: "Description 3", number: 40, price: 4.5 }
]}
2
Bruno de Andrade 15 Мар 2018 в 14:58

Вы хотите попытаться повторно выбрать последнюю запись? Эта функция ниже использует тот же метод, который вы описали выше, и работает уже много лет. То, что вы разместили выше, должно работать. Что заставляет вас говорить, что это не работает?

function refreshGrid(gridID) {
    var grid = $('#' + gridID).data('kendoGrid');
    var selectedItem = grid.dataItem(grid.select());
    grid.dataSource.read();
    grid.refresh();
    if (selectedItem != null && selectedItem.uid != null) {
        var row = grid.tbody.find('tr[data-uid="' + selectedItem.uid + '"]');
        row.addClass("k-state-selected");
        grid.select(row);
        grid.select(grid.table.find('tr').first());
    }
}
0
Ross Bush 13 Мар 2018 в 16:41