我在一个支持重新排序行的模板中有一个Kendo MVC Grid。我可以成功地拖放行并在发生这种情况时捕获事件(请参阅下面的处理程序),但除非我还编辑网格中的一个或多个单元格,否则单击“更新”按钮时不会触发“保存”事件。
drag-n-drop处理程序确实将受影响的模型设置为“脏”标志,但这似乎并未将其删除:
function onChangeEnumValueOrder(e) {
var uid = $(e.draggableEvent.currentTarget).data("uid");
var model = $("#TheGrid").data("kendoGrid").dataSource.getByUid(uid);
model.dirty = true;
}
任何提示或提示都将不胜感激。
[更新(网格定义)]
@(Html.Kendo().Grid<EnumItemViewModel>()
.Name("TheGrid")
.Columns(columns =>
{
columns.Bound(x => x.Id).Visible(false);
columns.Bound(x => x.Key).Visible(false);
columns.Bound(x => x.SortOrder).Width(10).Sortable(true);
columns.Bound(x => x.Value).Width(100);
columns.Command(command => command.Custom("Delete").Click("onDeleteEnumItem")).Width(100).Visible(true);
})
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(x => x.Key);
model.Field(x => x.Id).DefaultValue(Guid.Empty);
model.Field(x => x.Value);
})
.Read(read => read.Action("GetEnumItems", "SiteManagement").Data("getFieldIdEnumItemGrid"))
.Create(create => create.Action("AddEnumItem", "SiteManagement"))
.Update(update => update.Action("UpdateEnumItem", "SiteManagement"))
.Destroy(destroy => destroy.Action("DeleteEnumItem", "SiteManagement"))
.Events(events => events.Error("onErrorGrid('EnumGrid')"))
)
.Editable(editable => editable.DisplayDeleteConfirmation(false).Mode(GridEditMode.InCell))
.ToolBar(toolbar => toolbar.Create())
.Events(events => events.SaveChanges("onSaveEnumItemGrid")) // <-- EVENT NOT FIREING
.Sortable(sort =>
{
sort.SortMode(GridSortMode.SingleColumn);
sort.AllowUnsort(true);
})
)
@(Html.Kendo().Sortable()
.For("#TheGrid")
.Filter("table > tbody > tr")
.Cursor("move")
.HintHandler("hintHandlerSortable")
.PlaceholderHandler("placeholderHandlerSortable")
.ContainerSelector("#TheGrid tbody")
.Events(events => events.Change("onChangeEnumValueOrder"))
答案 0 :(得分:1)
在onChangeEnumValueOrder
中,按以下方式致电saveChanges()
:
function onChangeEnumValueOrder(e) {
var uid = $(e.draggableEvent.currentTarget).data("uid");
var model = $("#TheGrid").data("kendoGrid").dataSource.getByUid(uid);
model.dirty = true;
$("#TheGrid").data("kendoGrid").saveChanges();
}
您可能还需要考虑设置这样的数据:
model.set('<Property Name>', <Property Value>)
因为这应该为你设置脏标志。