>我创建了一个带有动态对象的网格,我想使用 GridEditMode.InLine 来更新和添加数据。弹出模式正在工作,但使用 InCell 和内联我收到以下错误:
模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。
我错过了什么吗?
我尝试使用自定义模板,但仍然收到相同的错误。
感谢您的帮助
@(Html.Kendo().Grid<dynamic>()
.Name("Grid")
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(true)
.Model(cfg =>
{
cfg.Id("SsdID");
foreach (var property in Model.PropertyDescriptors)
{
cfg.Field(property.Name, property.DataType);
}
})
.Read(cfg => cfg.Type(HttpVerbs.Post)
.Action("ReadDataForDefinition", "ManualDataEntry",
new { id = Model.LDefinitionId }))
.Update(u => u.Type(HttpVerbs.Post).Action("UpdateDataForDefinition","ManualDataEntry",
new { id = Model.LDefinitionId }))
.Create(u => u.Type(HttpVerbs.Post).Action("Create", "ManualDataEntry",
new { id = Model.LDefinitionId }))
)
.Resizable(resizing => resizing.Columns(true))
Columns(columns =>
{
foreach (var property in Model.PropertyDescriptors.Where(desc => desc.DisplayOrder.HasValue))
{
var binding = columns.Bound(property.DataType, property.Name);
if (property.DataType == typeof(DateTime) || property.DataType ==typeof(DateTime?))
binding.Format("{0:d}");
binding.Column.Title = property.Label;
}
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(toolbar => { toolbar.Create(); })
.Pageable(paging =>
{
paging.ButtonCount(10);
paging.PreviousNext(true);
paging.PageSizes(true);
})
.Editable(edit => edit.Mode(GridEditMode.InLine))
.Sortable()
.Scrollable()
.Filterable()
)
对于此类方案,仅支持弹出编辑模式。使用动态数据或 DataTable 时不支持内联和 InCell 编辑模式,因为 Grid 无法解析列的类型,因此无法创建正确的编辑器模板。您可以检查类型并手动分配模板作为解决方法。例如:
.Columns(columns =>
{
foreach (System.Data.DataColumn column in Model.Columns)
{
switch (column.DataType.ToString())
{
case "System.Int16":
case "System.Int32":
case "System.Int64":
columns.Bound(column.ColumnName).EditorTemplateName("Integer");
break;
case "System.Decimal":
case "System.Double":
case "System.Float":
columns.Bound(column.ColumnName).EditorTemplateName("Number");
break;
case "System.String":
columns.Bound(column.ColumnName).EditorTemplateName("String");
break;
default:
//etc etc
break;
}
}
})