Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Kendo网格,datatable绑定:System.ArgumentException:在类型:System.Data.DataRowView上找不到具有指定名称:ID的属性_Asp.net Mvc_Kendo Grid_Telerik Grid_Editablegrid - Fatal编程技术网

Asp.net mvc Kendo网格,datatable绑定:System.ArgumentException:在类型:System.Data.DataRowView上找不到具有指定名称:ID的属性

Asp.net mvc Kendo网格,datatable绑定:System.ArgumentException:在类型:System.Data.DataRowView上找不到具有指定名称:ID的属性,asp.net-mvc,kendo-grid,telerik-grid,editablegrid,Asp.net Mvc,Kendo Grid,Telerik Grid,Editablegrid,在我的视图中,我发送了一个模型,其中一个属性是DataTable(称为Data),我将其绑定到Kendo网格: @(Html.Kendo().Grid(Model.Data) .Name("MyGrid") .Columns(c => { if (Model.Data != null) { int index = 0; foreach (System.Data.DataColumn column in

在我的视图中,我发送了一个模型,其中一个属性是DataTable(称为Data),我将其绑定到Kendo网格:

@(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))
    )
@(Html.Kendo().Grid(Model.Data)
.Name(“MyGrid”)
.列(c=>
{
如果(Model.Data!=null)
{
int指数=0;
foreach(Model.Data.Columns中的System.Data.DataColumn列)
{
var col=c.Bound(column.ColumnName).Width(“300px”).EditorTemplateName(“字符串”);
如果(指数<2)
{
col.Locked(正确)。Lockable(错误);
}
索引++;
}
}
})
.DataSource(DataSource=>DataSource
.Ajax()
.Batch(真)
.ServerOperation(错误)
.Model(Model=>
{
model.Id(p=>p.Row[0]);
如果(Model.Data!=null)
{
model.Id(model.Data.Columns[0].ColumnName);
int指数=0;
foreach(Model.Data.Columns中的System.Data.DataColumn列)
{
var field=model.field(column.ColumnName,column.DataType);
如果(指数<2)
{
字段,可编辑(假);
}
索引++;
}
}
})
.页面大小(20)
.Create(update=>update.Action(“创建”、“主页”))
.Update(up=>up.Action(“UpdateRow”、“Home”))
)  
.可编辑(可编辑=>可编辑
.Mode(GridEditMode.InCell)
)
.可选(可选=>
{
可选模式(GridSelectionMode.Single);
可选.Type(GridSelectionType.Row);
})
.可滚动(scr=>scr.高度(500))
.Reorderable(reorder=>reorder.Columns(true))
.可调整大小(r=>r.Columns(true))
.Filterable(ftb=>ftb.Mode(GridFilterMode.Row))
.HtmlAttributes(新的{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:具有指定属性的属性 在类型:System.Data.DataRowView参数上找不到名称:ID 名称:propertyName


我有这个问题。 我用过

.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>

函数编辑处理程序(e){
var grid=$('#MyGrid')。数据('kendoGrid');
var fieldName=grid.columns[e.container.index()]字段;
var columnsToEdit=document.getElementById('EditableColumns').textContent;
var arrayOfColumns=columnsToEdit.split(“,”);
if(arrayOfColumns.indexOf(fieldName.toUpperCase())<0){
$(“MyGrid”).data(“kendoGrid”).closeCell(即容器);
}
}

其中“EditableColumns”标签包含所有应可编辑的列名称。

激活自动同步也非常重要:kendo.data.DataSource.prototype.options.autosync=true;//非常重要