Как я могу изменить значение поля данных в сетке кендо? - PullRequest
0 голосов
/ 28 июня 2019

Я генерирую сетку кендо с динамическими столбцами.Я передаю столбцы в виде списка и ограничиваю их, используя цикл for, сетка отображается правильно, но будет использовать встроенное редактирование своей ошибки броска.я проверил сетку и обнаружил, что поля отображаются как «Columns [0] .fieldnams», но это должно быть похоже на оригинальное имя поля, например, июнь2019.

(Html.Kendo().Grid<TeBS.RA.Entities.Entities.ResourceEffortCostPlanDetails>()
        .Name("ResourcePlannings")
        .Columns(columns =>{   columns.Bound(c => c.DesignationId).Title("Designation").Width(150);
            columns.Bound(c => c.EmployeeId).Title("Employee").Width(150);
            if (Model.resourceEffortCostPlan != null)
            {
                for (int i = 0; i < Model.resourceEffortCostPlan.Columns.Count; i++)
                {
                    columns.Bound(c => c.Columns[i].FieldName).Title(Model.resourceEffortCostPlan.Columns[i].Caption).Width(82)
                    .HeaderHtmlAttributes(new { @name = Model.resourceEffortCostPlan.Columns[i].Caption });
                }
            }

            columns.Bound(c => c.TotalManMonths).Title("Total Man Month").Width(100);
            columns.Bound(c => c.TotalManDays).Title("Total Man Days").Width(100);
            columns.Bound(c => c.ManDayCost).Title("Man Day Cost").Width(100);
            columns.Bound(c => c.ManDayCost).Title("Total Man Cost").Width(100);
            columns.Bound(c => c.Remarks).Title("Total Man Cost").Width(100);
            columns.Command(commands =>
            {
                commands.Edit(); 
                commands.Destroy(); 
            }).Title("Commands");
        })
        .Sortable()
        .Events(events => events
               .DataBound("onDataBound")
        )
        .Reorderable(reorderable => reorderable.Columns(true))
        .Sortable()
        .ToolBar(toolbar => toolbar.Create())
        .Editable(e => e.Mode(GridEditMode.InLine))
        .Scrollable(scr => scr.Height(250))
        .Pageable(pageable => pageable
        .Refresh(true)
        .Messages(e => e.Empty("No Records To Display"))
        .PageSizes(true)
        ).HtmlAttributes(new { style = "margin-left: 10px" })
        .Resizable(resize => resize.Columns(true))
        .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        .PageSize(10)
        .Model(model => model.Id(c => c.ID))
        .Create(create => create.Action("ResourcePlanning", "Project"))
        .Read(read => read.Action("ResourcePlanning", "Project"))
        .Update(read => read.Action("ResourcePlanning", "Project"))
        .Destroy(read => read.Action("ResourcePlanning", "Project"))
        )

)

поле данных для обозначения - "обозначение", но для динамически генерируемого столбца оно похоже на "Столбцы [0]. Имя_файла" и т. Д.

, пожалуйста, помогите, если кто-нибудь знает, что такоеактуальная проблема тут.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Я думаю, вы должны попытаться добавить поля столбцов в качестве полей в модели источника данных в сетке кендо.Таким образом, вы можете указать имя поля для получения значений из

0 голосов
/ 28 июня 2019

Мое первое предложение - абстрагировать вашу логику в контроллер.Цикл for, который считывает ваши данные в вашу сетку, может быть помещен в ваш метод Controller и считан в данные таким образом.Что касается вашей ошибки при редактировании, я не вижу реальных звонков, чтобы сделать редактирование.Вы вызываете свой метод ResourcePlanning внутри контроллера «Project».Не видя этот код, трудно сказать, в чем может быть ошибка.Вот пример проекта, который у меня есть.Вам не нужно ничего читать в реальном файле cshtml, особенно если вы используете Ajax-вызовы.Это также исключает необходимость отправки модели в ваш View.Надеюсь, что эти примеры кода помогут вам.

Мое представление индекса:

@(Html.Kendo().Grid<PSAViewModel>().Name("psa-grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.CreatedAt).Format("{0:MM/dd/yyyy}");
        columns.ForeignKey(c => c.ProductionLineId, (System.Collections.IEnumerable)ViewData["ProductionLines"], "Id", "Name");
        columns.Command(command => { command.Edit(); }).HtmlAttributes(new { style = "width: 10%" });
    })
    .ToolBar(toolbar => toolbar.Create().Text("New PSA Request"))
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .DataSource(ds =>
    ds.Ajax()
    .ServerOperation(false)
    .Model(model =>
    {
        model.Id(p => p.Id);
        //GUID of Medium Voltage line for default
        model.Field(p => p.ProductionLineId).DefaultValue("2a23cec5-226f-47be-b97b-cebca5736fa5");
    })
    .Read(read => read.Action("GetPSAList", "PSA"))
    .Create(create => create.Action("CreateNewPSA", "PSA"))
    .Update(update => update.Action("EditPSAInLine", "PSA"))
    )
    .Filterable()
    .Sortable()
    .Pageable()
)

Метод редактирования My Controller.

[HttpPost]
    public ActionResult EditPSAInLine([DataSourceRequest] DataSourceRequest request, PSAViewModel psavm)
    {
        if(psavm != null && ModelState.IsValid)
        {
            PSA psa = _psaService.Find(psavm.Id);
            psa.ProductionLineId = psavm.ProductionLineId;
            psa.ProdLine = _productionLineService.Find(psavm.ProductionLineId);

            _psaService.Update(psa);
        }
        return this.Json(new[] { psavm }.ToDataSourceResult(request, ModelState));
    }
...