Я боролся с этим некоторое время и не могу найти решение.
Когда отображается Kendo().ComboBox
внутри Kendo().Grid
, оно заполняется данными.
Однако при изменении значения внутри ComboBox
или при добавлении новой записи в сетку значение не остается прежним при переключении фокуса с текущей строки.
До изменения:
После изменения и переключения фокуса:
Новое значение:
После переключения фокуса:
В случае изменения его на новое значение по умолчанию используется старое.
А в случае добавления новой записи она выглядит пустой:
При нажатии «ДОБАВИТЬ НОВУЮ ЗАПИСЬ»:
После переключения фокуса:
Вот такая у меня логика:
Контроллер:
Заполняющая сетка:
[HttpPost]
public ActionResult EditingCustom_Read([DataSourceRequest] DataSourceRequest request, IEnumerable<TestTicketReportPropertyModel> models, int ticketID)
{
var ticketReportProp = new TestTicketReportPropertyModel().GetAll(ticketID);
return Json(ticketReportProp.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
Заполнение ComboBox:
public ActionResult PopulateReportProperty(int reportID)
{
List<eBalance.Site.eBalanceServiceReference.ReportPropertyEntity> reportPropertyList = TicketReportPropertyRepository.GetReportPropertyEntityRepository(reportID);
return Json(reportPropertyList, JsonRequestBehavior.AllowGet);
}
Модель:
//Getting Grid's data
public IList<TicketReportPropertyEntity> GetAll(int ticketID)
=> EBalanceService.GetTicketReportPropertyData(ticketID).ToList();
Сервисный метод для получения данных для Grid:
public List<TicketReportPropertyEntity> GetTicketReportPropertyData(int ticketId)
{
var ticketReportPropertyData = TicketReportProperty.GetTicketReportPropertyData(ticketId);
ticketReportPropertyData.ForEach(t => t.PropertyName = t.ReportProperty?.PropertyName ?? "0");
ticketReportPropertyData.ForEach(t => t.ReportPropertyID = t.ReportProperty?.ReportPropertyID ?? 0);
return ticketReportPropertyData;
}
Вид:
<div class="div-table-row col-lg-12">
<div style="margin-bottom: 20px;">
@(Html.Kendo().Grid<TicketReportPropertyEntity>()
.Name("grid2")
.Columns(columns =>
{
columns.Bound(p => p.ID).Hidden();
columns.Bound(p =>p.PropertyName).EditorTemplateName("_PropertyNameEditor").Sortable(false).Width(400);
columns.Bound(p => p.Amount).Width(130);
columns.Command(command => command.Destroy()).Width(150);
})
//.Events(events => events.Edit("Edit"))
.ToolBar(toolBar =>
{
toolBar.Create();
toolBar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.HtmlAttributes(new { style = "height:550px;" })
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.ServerOperation(false)
//.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(r => r.ID);
})
.PageSize(20)
.Read(read => read.Action("EditingCustom_Read", "TestTicketReportProperty", new { ticketID = Model.TicketID }))
.Create(create => create.Action("EditingCustom_Create", "TestTicketReportProperty"))
.Update(update => update.Action("EditingCustom_Update", "TestTicketReportProperty"))
.Destroy(destroy => destroy.Action("EditingCustom_Destroy", "TestTicketReportProperty"))
)
)
</div>
</div>
Шаблон редактора:
<script>
function GetReportID() {
return {
reportID: $('#ReportID').attr('text'),
};
}
</script>
@(Html.Kendo().ComboBox()
.Name("ReportPropertyCB")
.DataValueField("ID")
.DataTextField("PropertyName")
//.BindTo((System.Collections.IEnumerable)ViewData["reportProperties"])
.DataSource(d => d.Read(r => r.Action("PopulateReportProperty", "TestTicketReportProperty").Data("GetReportID()")))
.Template("<span class=\"k-state-default\"><h3>#: PropertyName #</h3><p>#: ReportGroup #</p></span>")
)
Я также пытался использовать пример Telerik's team
, и он не работал в моем случае.
Может кто-нибудь объяснить, что я здесь делаю не так?