【问题标题】:How can i change value data-field in kendo grid?如何更改剑道网格中的值数据字段?
【发布时间】:2019-06-28 12:16:43
【问题描述】:

我正在生成一个带有动态列的剑道网格。我将列作为列表传递并使用 for 循环进行边界,网格正确显示,但将使用内联编辑其抛出错误。我检查了网格,发现这些字段显示为“Columns[0].fieldnams”,但它应该类似于原始字段名称,例如 Jun2019。

(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"))
        )

)

designationid 的数据字段是“designationid”,但对于动态生成的列,它类似于“Columns[0].FieldName”等。

如果有人知道这里的实际问题是什么,请提供帮助。

提前致谢

【问题讨论】:

    标签: kendo-ui kendo-grid asp.net-mvc-5.2


    【解决方案1】:

    我的第一个建议是将您的逻辑抽象到控制器中。将数据读入网格的 for 循环可以放在 Controller 方法中并以这种方式读入数据。至于您在编辑时的错误,我没有看到任何实际需要进行编辑的调用。您正在“项目”控制器中调用“资源计划”方法。如果没有看到此代码,很难说出错误可能是什么。这是我拥有的一个项目的示例。您不必阅读实际 cshtml 文件中的任何内容,尤其是因为您正在使用 Ajax 调用。它还可以防止将模型发送到您的视图中。希望这些代码示例对您有所帮助。

    我的索引视图:

    @(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()
    )
    

    我的控制器编辑方法。

    [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));
        }
    

    【讨论】:

      【解决方案2】:

      我认为您应该尝试将列字段添加为剑道网格中数据源模型中的字段。这样您就可以指定字段名称以从中获取值

      【讨论】:

        猜你喜欢
        • 2013-04-04
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        相关资源
        最近更新 更多