2016-11-02 4 views
0

Ich habe ein Kendo MVC Grid in einer Vorlage, die Neuordnung von Zeilen unterstützt. Ich kann die Zeilen erfolgreich ziehen und ablegen und das Ereignis abfangen, wenn dies passiert (siehe Handler unten), aber wenn ich nicht auch eine oder mehrere Zellen im Raster bearbeite, wird das Speichern-Ereignis nicht ausgelöst, wenn ich auf die Schaltfläche Aktualisieren klicke.Kendo MVC Grid Speichern Ereignis nicht ausgelöst

Die Drag-n-Drop-Handler das betroffene Modell (e) ‚schmutzig‘ Flag nicht gesetzt, aber das scheint nicht zu schneiden:

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

Für Hinweise oder Tipps geschätzt würden.

[UPDATE (Grid-Definition)]

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

Können Sie Ihre Rasterdefinition posten? –

+0

Fertig. Danke, dass du dir die Zeit genommen hast! –

+0

Entschuldigung für die Verzögerung. Es sieht nicht so aus, als würden Sie tatsächliche Werte für die Aktualisierung festlegen. Wahrscheinlich müssen Sie eine Eigenschaft wie 'SortOrder' auf den neuen Sortierwert setzen. –

Antwort

1

In Ihrem onChangeEnumValueOrder, rufen saveChanges() wie folgt:

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(); 
} 

Sie auch Ihre Daten wie diese Einstellung betrachten wünschen können:

model.set('<Property Name>', <Property Value>) 

als dies sollte die schmutzige Flagge für Sie festlegen.

+0

Wenn ich versuche, $ (e.draggableEvent.currentTarget) zu verwenden, bekomme ich eine Ausnahme, dass currentTarget nicht definiert ist. Ich mache etwas ähnliches, das funktioniert, aber ich bin neugierig auf den Unterschied. Ich habe bereits die Datenquelle in einer separaten Variable 'ds' und dann ds.getByUid (e.draggable.currentTarget.data ("uid")); –