私の見解では、Kendo Grid にバインドする 1 つのプロパティが DataTable (データと呼ばれる) であるモデルを送信します。
@(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