2014-01-17 3 views
3

Я создал сетку с динамическим объектом, и я хотел бы использовать 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

Для таких сценариев поддерживается только режим PopUp редактирования. Режимы редактирования InLine и InCell не поддерживаются при использовании динамических данных или DataTable, поскольку 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; 
    } 
    } 
}) 
Смежные вопросы