2016-11-02 2 views
0

행의 순서를 다시 지정할 수있는 템플릿에 Kendo MVC Grid가 있습니다. 성공적으로 행을 드래그 앤 드롭하고 이벤트가 발생하면 (아래 핸들러 참조), 그리드에서 하나 이상의 셀을 편집하지 않으면 업데이트 버튼을 클릭 할 때 저장 이벤트가 실행되지 않습니다.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 (그리드 정의)] 당신의 onChangeEnumValueOrder에서

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

지연되어서 죄송합니다. 업데이트 할 실제 값을 설정하는 것처럼 보이지 않습니다. 새 정렬 값이 –

답변

1

, 다음과 같이 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"))를 수행합니다. –