内联编辑模式是动态对象

时间:2014-01-17 01:08:43

标签: asp.net-mvc dynamic grid kendo-ui inline-editing

我用动态对象创建了一个网格,我想使用GridEditMode.InLine来更新和添加数据。 popUp模式正在运行,但使用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()
)

1 个答案:

答案 0 :(得分:1)

对于此类场景,仅支持PopUp编辑模式。使用动态数据或DataTable时不支持InLine和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;
    }
  }
})