2016-11-02 4 views
0

У меня есть сетка Kendo MVC в шаблоне, который поддерживает переупорядочение строк. Я могу успешно перетащить строки и поймать событие, когда это произойдет (см. Обработчик ниже), но если я также не отредактирую одну или несколько ячеек в сетке, событие сохранения не срабатывает, когда я нажимаю кнопку «Обновить».Kendo MVC Grid Сохранение события не срабатывает

Обработчик перетащить-н-капли делает набор пораженный модель (ы) «грязный» флаг, но это не похоже, чтобы сократить его:

function onChangeEnumValueOrder(e) { 
    var uid = $(e.draggableEvent.currentTarget).data("uid"); 
    var model = $("#TheGrid").data("kendoGrid").dataSource.getByUid(uid); 
    model.dirty = true; 
} 

Любые намеки или советы будут оценены.

[UPDATE (определение сетки)]

@(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

Можете ли вы опубликовать определение сетки? –

+0

Готово. Спасибо, что нашли время! –

+0

Извините за задержку. Не похоже, что вы устанавливаете какие-либо фактические значения для обновления. Вероятно, вам нужно установить свойство, такое как 'SortOrder', независимо от нового значения сортировки –

ответ

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>) 

поскольку это должно установить для вас грязный флаг.

+0

Когда я пытаюсь использовать $ (e.draggableEvent.currentTarget), я получаю исключение, которое currentTarget не определено. Я делаю что-то подобное, что работает, но мне интересно, какая разница. У меня уже есть источник данных в отдельной переменной «ds», а затем ds.getByUid (e.draggable.currentTarget.data («uid»)); –