我正在生成带有动态列的剑道网格。我将列作为列表传递并使用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”等。
如果有人知道这里的实际问题,请提供帮助。
预先感谢
答案 0 :(得分:0)
我的第一个建议是将逻辑抽象到控制器中。将数据读入网格的for循环可以放置在Controller方法内,并以这种方式读入数据。至于您在编辑时出现的错误,我看不到任何实际的电话来进行编辑。您正在“项目”控制器中调用“ ResourcePlanning”方法。没有看到此代码,很难说出错误可能是什么。这是我有一个项目的示例。您不必在实际的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()
)
我的控制器编辑方法。
[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));
}
答案 1 :(得分:0)
我认为您应该尝试在kendo网格中将列字段添加为数据源模型中的字段。这样,您就可以指定字段名称来从中获取值