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