Редактирование InCell с выпадающим списком в сетке не сохраняет изменения для массового редактирования. - PullRequest
0 голосов
/ 02 июля 2019

Я должен сделать Kendo grid с правкой inCell, и один из столбцов должен быть выпадающим.Когда ячейка не находится в режиме редактирования, она отображает название модели.Раскрывающийся список заполняется так, как и должно, когда я вхожу в режим редактирования для этой ячейки и когда я выбираю нужное значение, оно изменяется соответствующим образом, но когда я щелкаю вдали от редактируемой ячейки, отображаемое значение остается прежним значением вместо выбранного значения,Но когда я хочу изменить его снова, отображается правильное значение.Я сделал gif, показывающий мою проблему: Здесь .

Вещи, которые я пробовал, такие как использование bound и foreignKey в разделе столбцов сетки (то же самое происходит в обоих), добавляясобытие для изменения значения ячейки для нужного текста при выходе из редактирования ячейки с помощью javascript (.Events(ev => ev.Save(@"function(e){setTimeout(bindOnClose())}"))) и установки data_value_primitive в значение true в раскрывающемся списке.

Вот мой код: Вид

@(Html.Kendo().Grid<MPAdminCORE.Models.ProductCategory>()
                            .Name("grid").ToolBar(toolbar =>
                            {
                                toolbar.Save().SaveText("Shrani").CancelText("Prekliči"); // The "save" command saves the changed data items
                                toolbar.Excel().Text("Excel");
                            })
                            .Excel(excel => excel
                                .FileName("NerazvrščeniArtikli.xlsx")
                                .Filterable(true)
                            )
                            .Selectable()
                            .Editable(editable => editable.Mode(GridEditMode.InCell)) // Use inline editing mode
                            .DataSource(dataSource =>
                                dataSource.Ajax()
                                .Model(model =>
                                {
                                    model.Id(x => x.Id); // Specify the property which is the unique identifier of the model
                                    model.Field(x => x.Id).Editable(false); // Make the ProductID property not editable
                                    model.Field(x => x.Product.Name).Editable(false);
                                    model.Field(x => x.Product.Sku).Editable(false);
                                    model.Field(x => x.Product.FullDescription).Editable(false);
                                    model.Field(x => x.Product.VendorId).Editable(false);
                                    model.Field(x => x.CategoryId);
                                    model.Field(x => x.Category).DefaultValue(ViewData["NopProductCategories"] as CategoryViewModel);
                                })
                                .ServerOperation(false)
                                .Events(events =>
                                {
                                    events.RequestEnd("onRequestEnd");
                                })
                                .Read(read => read.Action("ImpProducts_Read", "ImpUncategorisedProduct")
                                .Data("vendoridReadData"))
                                .Update(create => create.Action("EditingCustom_Update", "ImpUncategorisedProduct").Data("TESTupdateData"))
                                .Destroy("DeleteUncategorisedProductCategory", "ImpUncategorisedProduct").PageSize(30)
                            )  // Action invoked when the grid needs data
                            .Columns(columns =>
                            {
                                columns.Bound(impproduct => impproduct.Product.Sku).HtmlAttributes(new { id = "SkuCode" });
                                columns.Bound(impproduct => impproduct.Product.Name);
                                columns.Bound(impproduct => impproduct.Product.FullDescription).HtmlAttributes(new { style = "white-space: nowrap; max-width: 100px;" });
                                columns.Bound(impproduct => impproduct.Product.VendorId).Width(120).Title("Id dobavitelja");
                                columns.Bound(impproduct => impproduct.Category).ClientTemplate("#=Category.CategoryName#");
                                columns.ForeignKey(impproduct => impproduct.CategoryId, (System.Collections.IEnumerable)ViewData["NopProductCategories"], "Id", "Name").EditorTemplateName("NopProductCategoryEditor")
                                    .Title("Kategorije NOP produkta");
                            })
                            .Pageable(pageable => pageable
                                .Refresh(true)
                                .PageSizes(true)
                                .PageSizes(new[] { 30, 50, 100 })
                                .Messages(messages => messages.Display("{0} - {1} od {2} vrstic"))
                                .Messages(messages => messages.ItemsPerPage("vrstic na stran"))
                                .Messages(messages => messages.Empty("Ni vrstic")) // Enable paging
                            ) // Enable paging
                            .AutoBind(false)

Мой метод контроллера, который заполняет viewData:

ICategoryService cat = EngineContext.Current.Resolve<ICategoryService>();
            var cats = cat.GetAllCategories(showHidden: true);
            ViewData["NopProductCategories"] = cats.Select(c => new { Id = c.Id, Name = cat.GetFormattedBreadCrumb(c) });

Моя модель:

public partial class ProductCategory
    {
        //other fields
        ...

        [UIHint("NopProductCategoryEditor")]
        public virtual CategoryViewModel Category { get; set; }

    }
    public class CategoryViewModel
    {
        [Key]
        public int CategoryID { get; set; }

        public string CategoryName { get; set; }
    }

И мой раскрывающийся список (NopProductCategoryEditor.cshtml):

        .HtmlAttributes(new { data_value_primitive = "true" })
        .Name("Category") // Name of the widget should be the same as the name of the property
        .DataValueField("Id") // The value of the dropdown is taken from the property
        .DataTextField("Name") // The text of the items is taken from the property
        .BindTo((System.Collections.IEnumerable)ViewData["NopProductCategories"]) // A list of all which is populated in the controller
)

Я бы хотел, чтобы это сохраняло новое выбранное значение в ячейке до тех пор, пока пользователь не решит щелкнуть «Сохранить» или «Отмена». Пример * * тысячи двадцать-пять

...