Kendo (). ComboBox не сохраняет выбранные значения, когда находится внутри Kendo (). Шаблон редактора сетки при перемещении фокуса от строки - PullRequest
0 голосов
/ 20 июня 2019

Я боролся с этим некоторое время и не могу найти решение.

Когда отображается Kendo().ComboBox внутри Kendo().Grid, оно заполняется данными.

Однако при изменении значения внутри ComboBox или при добавлении новой записи в сетку значение не остается прежним при переключении фокуса с текущей строки.

До изменения: enter image description here

После изменения и переключения фокуса: Новое значение: enter image description here

После переключения фокуса: enter image description here

В случае изменения его на новое значение по умолчанию используется старое. А в случае добавления новой записи она выглядит пустой:

При нажатии «ДОБАВИТЬ НОВУЮ ЗАПИСЬ»: enter image description here

После переключения фокуса: enter image description here

Вот такая у меня логика:

Контроллер:

Заполняющая сетка:

[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, и он не работал в моем случае.

Может кто-нибудь объяснить, что я здесь делаю не так?

1 Ответ

0 голосов
/ 07 июля 2019

Для привязки данных от сетки к редактору имя редактора должно совпадать с именем свойства.Вы можете узнать больше о Создание пользовательских редакторов для связанных свойств и Привязка значений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...