Kendo UI Grid MVC отменяет изменения при редактировании и отмене локальных данных - PullRequest
0 голосов
/ 06 сентября 2018

У нас есть Kendo Grid в C # MVC, который связан с локальным источником данных. Мы можем добавлять и удалять записи в порядке, но всякий раз, когда мы используем встроенный Edit, а затем нажимаем кнопку «Отмена» из редактирования, это отменяет большинство изменений в сетке. Мы загружаем данные из модели, переданной нашему представлению, и имеем функции Javascript для вызова метода grid.cancelChanges(); API при отмене. Я просмотрел несколько других похожих тем, но ни один из предоставленных ответов не помог нам в настройке. Код сетки:

Html.Kendo().Grid<ProviderLocationGridDTO>(Model.NewModel.ProviderLocations)
            .Name("locationsGrid")
            .Columns(cols =>
            {
                cols.Bound(p => p.ProviderLocationId).Hidden();
                cols.Bound(p => p.PendingChangeId).Hidden();
                cols.Bound(p => p.ProviderId).Hidden();
                cols.Bound(p => p.LocationId).Hidden();
                cols.Bound(p => p.IsRemoved).Hidden();
                cols.Bound(p => p.IsAdded).Hidden();
                cols.Bound(p => p.IsChanged).Hidden();
                cols.Bound(p => p.LocationName).Width("35%").Title("Name").EditorTemplateName("LocationNameAutoCompleteForm").Sortable(true)
                    .Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(false)))
                    .HtmlAttributes(new { @class = "" }).ClientTemplate
                    (
                        @"<span>#: LocationName #</span>"
                    );
                cols.Bound(p => p.DisplayAddress).Title("Address").Width("20%");
                cols.Bound(p => p.AllContacts).Title("Contact").Width("20%");
                cols.Bound(p => p.PrimaryLocation.PrimaryLocationValue).Width("10%")
                .EditorTemplateName("DDL_ProviderPrimaryLocation")
                    .Title("Primary");
                cols.Command(command =>
                {
                    command.Edit().UpdateText("Save").HtmlAttributes(new { @class = !Model.LocationsFormField.IsEditOnLanding ? "k-state-disabled" : "", @style = !Model.LocationsFormField.IsEditOnLanding ? "pointer-events: none;" : "" });
                    command.Custom("Undo").Click("onUndoLocationRemove").HtmlAttributes(new { @class = !Model.LocationsFormField.IsEditOnLanding ? "k-state-disabled" : "", @style = !Model.LocationsFormField.IsEditOnLanding ? "pointer-events: none;" : "" });
                    command.Custom("Remove").Click("onLocationRemove").HtmlAttributes(new { @class = !Model.LocationsFormField.IsEditOnLanding ? "k-state-disabled" : "", @style = !Model.LocationsFormField.IsEditOnLanding ? "pointer-events: none;" : "" });
                }).Title("Action").Width("15%");
            })
            .Editable(editable => editable.Mode(GridEditMode.InLine))
            .Pageable(pageable => pageable
                .Refresh(true))
            .Scrollable()
            //.HtmlAttributes(new { style = "height:550px;" })
            .Events(events =>
            {
                events.DataBound("onGridDataBound");
                events.Edit("onEditGridRow");
                events.Save("onSaveGridRow");
                events.Cancel("onCancelGridRow");
                events.Remove("onLocationRemove");
            })
            .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(10)
                .ServerOperation(false)
                .Model(model =>
                {
                    model.Id(p => p.LocationId);
                    model.Field(p => p.PrimaryLocation).DefaultValue(defaultPrimaryValue);
                })
                .Create(create => create.Action("AddLocation", "ProviderUpdate").Data("sendAntiForgery"))
                .Update(update => update.Action("UpdateLocation", "ProviderUpdate").Data("sendAntiForgery"))
        ))

и наши функции JavaScript для редактирования / отмены:

function onEditGridRow(e) {
e.preventDefault();
if (e.model.ProviderLocationId !== 0) {
    var txtLocationName = $(e.container).parent().find("#LocationName");
    $(txtLocationName).attr('readonly', 'true');
}
var txtDisplayAddress = $(e.container).parent().find("#DisplayAddress");
$(txtDisplayAddress).attr('readonly', 'true');
var txtAllContacts = $(e.container).parent().find("#AllContacts");
$(txtAllContacts).attr('readonly', 'true');
}

function onCancelGridRow(e) {
e.preventDefault();
var grid = $("#locationsGrid").data('kendoGrid');
var row = grid.tbody.find("tr[data-uid='" + e.model.uid + "']");
$(row).find(".k-grid-Remove").removeClass("hide-imp");
$(row).find(".k-grid-Undo").addClass("hide-imp");

grid.cancelChanges();
}

Любая помощь будет оценена!

...