在@(Html.Kendo()。Grid(Model)中定义DataSource时,我已成功使用
.DataSource( dataSource => .Ajax( ).Model( model => model.Id( m => m.PROPERTY ) ) )
其中PROPERTY是作为模型的对象的属性。如果Model是System.Data.DataTable并且DataTable中的Id列是TableId,那么定义Model.Id的正确语法是什么?
换句话说,model.Id(m => ???)。
我试过model.Id( m => Model.PrimaryKey )
,它似乎满足了设置model.Id的要求,但更新动作(.Update(update => update.Action("MyUpdateMethod", "MyController")
)没有命中,所以我认为仍然必须出了点问题。
答案 0 :(得分:2)
您可以绑定到DataTable。事实上,我们做了很多动态网格,DataTable是我们唯一的办法。但是,绑定有点不同。
我们其中一个的片段是这样的:
@model System.Data.DataTable
@(Html.Kendo().Grid(Model)
.Name("SomeGrid")
.Columns(columns=>
{
foreach(System.Data.DataColumn column in Model.Columns)
{
columns.Bound(column.ColumnName).Title(column.Caption).Width(200);
}
}
)
.Selectable(selectable=>selectable
.Type(GridSelectionType.Row)
)
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
foreach(System.Data.DataColumn column in Model.Columns)
{
model.Field(column.ColumnName,column.DataType);
}
}
)
.Read(read=>Action("SomeMethod", "SomeController"))
.PageSize(20)
)
答案 1 :(得分:0)
我有一个答案,虽然它不是真正的光滑。它有几个部分。
首先,为了编辑,我必须设置一个Model.Id,该怎么做才是我原来的问题。答案就是在.DataSource.Model方法中model.Id( "KEY_COLUMN_NAME" )
。但是,这还不足以解决Update不会发生的问题。 Telerik支持建议我需要定义一个自定义数据对象(POCO),该对象具有与DataTable具有列相同的所有属性。 POCO成为更新的类型
public ActionResult MyUpdate( [DataSourceRequest] DataSourceRequest _request, MyPOCO _data ){...}