Kendo DataSource如何在使用DataTable时定义Model.Id

时间:2013-09-10 20:13:26

标签: kendo-ui kendo-grid kendo-asp.net-mvc

在@(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"))没有命中,所以我认为仍然必须出了点问题。

2 个答案:

答案 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支持建议我需要定义一个自定义数据对象(PO​​CO),该对象具有与DataTable具有列相同的所有属性。 POCO成为更新的类型

public ActionResult MyUpdate( [DataSourceRequest] DataSourceRequest _request, MyPOCO _data ){...}

然后,编辑器可以将DataRow列映射到POCO属性,然后MyUpdate可以工作。