在我看来,我发送Model,其中一个属性是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
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.ArgumentException:指定的属性 name:在类型上找不到ID:System.Data.DataRowView Parameter name:propertyName
答案 0 :(得分: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>
Where&#34; EditableColumns&#34; label包含应该可编辑的所有列名称。