0

在我看来,我发送模型,其中一个属性是 DataTable(称为 Data),我将其绑定到 Kendo Grid:

@(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))
    )

问题在于 line field.Editable(false) - 当我尝试设置为 true 时,它​​可以工作。它说我的 DataRowView 中没有 ID 值 - 我很确定我的 DataTable 有名为 ID 的列,我检查了 100 多次。确切的错误:

具有指定名称的属性:在类型上找不到 ID:System.Data.DataRowView 参数名称:propertyName

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:具有指定名称的属性:在类型上找不到 ID:System.Data.DataRowView 参数名称:propertyName

4

1 回答 1

0

我有海湾通行证的问题。我用过

.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”标签包含所有应该可编辑的列名。

于 2017-02-15T14:33:57.400 回答