我有一个Telerik MVC网格,我在其中更新内联的行(更新名称列,数字列不可编辑)
@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函数中读取的数据源,该更改也不会立即反映在网格中。控制台显示“我在Update中”,但不刷新网格。如果刷新页面,我会看到更新行。
请让我知道我在想什么。谢谢。
答案 0 :(得分:0)
可能您应该尝试使用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();
}
}
请注意,dataSource
中的read()
函数仅根据请求将数据源重新加载到服务器,在使用refresh()
之前,网格内容仍未更改。
答案 1 :(得分:0)
进行更新时,您不必刷新/重新加载网格,只需从控制器中返回更新的记录,grid-widget将负责其余的工作!
请检出telerik demo-page
我最常见的错误是忘记返回数据源结果:
.ToDataSourceResult(request,ModelState)
Telerik通常返回与更新相同的模型,但我通常返回与read函数返回的对象相同的对象(如果read也会在更新后的记录中得到该对象)。