2017-02-15 18 views
0

На мой взгляд, я отправляю Model, где одно свойство - DataTable (называемое Data), которое я связываю с Кендо Сетка:Kendo Grid, datatable bind: System.ArgumentException: Свойство с указанным именем: ID не может быть найдено по типу: System.Data.DowRowView

@(Html.Kendo().Grid(Model.Data) 
    .Name("MyGrid") 
    .Columns(c => 
    { 
     if (Model.Data != null) 
     { 
      int index = 0; 
      foreach (System.Data.DataColumn column in Model.Data.Columns) 
      { 
       var col = c.Bound(column.ColumnName).Width("300px").EditorTemplateName("String"); 
       if (index < 2) 
       { 
        col.Locked(true).Lockable(false); 
       } 
       index++; 
      } 
     } 
    }) 
    .DataSource(dataSource => dataSource 
    .Ajax() 
    .Batch(true) 
    .ServerOperation(false) 
    .Model(model => 
    { 
     model.Id(p => p.Row[0]); 
     if (Model.Data != null) 
     { 
      model.Id(Model.Data.Columns[0].ColumnName); 
      int index = 0; 
      foreach (System.Data.DataColumn column in Model.Data.Columns) 
      { 
       var field = model.Field(column.ColumnName, column.DataType); 
       if (index < 2) 
       { 
        field.Editable(false); 
       } 
       index++; 
      } 
     } 
    }) 
    .PageSize(20) 
.Create(update => update.Action("Create", "Home")) 
.Update(up => up.Action("UpdateRow", "Home")) 
) 
.Editable(editable => editable 
    .Mode(GridEditMode.InCell) 
    ) 
    .Selectable(selectable => 
    { 
     selectable.Mode(GridSelectionMode.Single); 
     selectable.Type(GridSelectionType.Row); 
    }) 
.Scrollable(scr => scr.Height(500)) 
.Reorderable(reorder => reorder.Columns(true)) 
.Resizable(r => r.Columns(true)) 
.Filterable(ftb => ftb.Mode(GridFilterMode.Row)) 
.HtmlAttributes(new { style = "height:100%" }) 
.Pageable() 
.Navigatable() 
.Sortable() 
.Groupable(g => g.ShowFooter(true)) 
    ) 

проблема с линии field.Editable (ложной) - когда я пытаюсь установить это верно работает. В нем говорится, что у меня нет значения ID в моем DataRowView - я уверен, что у моего DataTable есть столбец с именем ID, я проверил его как 100 + раз. Exact Ошибка:

Property with specified name: ID cannot be found on type: System.Data.DataRowView Parameter name: propertyName

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Property with specified name: ID cannot be found on type: System.Data.DataRowView Parameter name: propertyName

+0

Также очень важно активировать автосинхронизацию: Kula

ответ

0

У меня есть baypass проблемы. Я использовал

.Events(events => 
    { 
     events.Edit("edit_handler"); 
    }) 

где моя функция выглядит:

<script type="text/javascript" language="javascript"> 

     function edit_handler(e) { 
      var grid = $('#MyGrid').data('kendoGrid'); 
      var fieldName = grid.columns[e.container.index()].field; 
      var columnsToEdit = document.getElementById('EditableColumns').textContent; 
      var arrayOfColumns = columnsToEdit.split(","); 
      if (arrayOfColumns.indexOf(fieldName.toUpperCase()) < 0) { 
       $("#MyGrid").data("kendoGrid").closeCell(e.container); 
      } 
     } 
    </script> 

Где "EditableColumns" метка содержит все имена столбцов, которые должны быть доступны для редактирования.