Telerik MVC Grid Встроенное редактирование требует обновления страницы для отображения изменений - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть Telerik MVC Grid, где я обновляю строки в строке (обновление столбца имени, столбец номера недоступен для редактирования)

 @Html.Kendo().Grid(Model.Employees)
        .Name("EmployeeGrid")
        .Columns(col =>
        {
            col.Bound(o => o.EmployeeNumber);
            col.Bound(o => o.Name).Width(250);
            col.Command(command => { command.Edit(); });
        })
        .Editable(editable => editable.Mode(GridEditMode.InLine))
        .DataSource(dataSource => dataSource
        .Ajax()
        .Events(e => e.RequestEnd("onGridDataSourceRequestEnd"))
        .Model(model =>
        {
            model.Id(o => o.EmployeeNumber);
            model.Field(o => o.EmployeeNumber).Editable(false);
        })
        .Update(update => update.Action("EditingInline_Update", "EmployeeUpdate"))
        .ServerOperation(false)
        )
        .Render();


 function onGridDataSourceRequestEnd(e) {
    if (e.type == "update") {
        console.log('I am inside Update');
        $("#EmployeeGrid").data("kendoGrid").dataSource.read();
    }
}

Моя проблема в том, что приведенный выше код обновляет запись, вызывая действие EmployeeUpdate, когда я нажимаю кнопку Обновить в сетке. Однако это изменение не сразу отражается в таблице, хотя я вызываю чтение источника данных в функции JS. Консоль показывает «Я внутри Обновления», но не обновляет сетку. Если я обновляю страницу, я вижу строку обновления.

Пожалуйста, дайте мне знать, что мне не хватает. Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вам не нужно обновлять / перезагружать вашу сетку при обновлении, вы просто должны вернуть обновленную запись из контроллера, а сетка-виджет позаботится обо всем остальном!

Пожалуйста, проверьте telerik Демо-страница

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

.ToDataSourceResult(request,ModelState)

Telerik обычно возвращает ту же модель, которая была отправлена ​​в обновление, но я обычно возвращаю тот же объект, который возвращает функция чтения (если read делает что-то, я получу это и в обновленной записи).

0 голосов
/ 09 ноября 2018

Возможно, вам следует попробовать обновить сетку с помощью функции refresh():

function onGridDataSourceRequestEnd(e) {
    if (e.type == "update") {
        console.log('I am inside Update');
        $("#EmployeeGrid").data("kendoGrid").dataSource.read();

        // add this line
        $("#EmployeeGrid").data("kendoGrid").refresh();
    }
}

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

...