5

When defining a DataSource within @(Html.Kendo().Grid(Model), I have successfully used

.DataSource( dataSource => .Ajax( ).Model( model => model.Id( m => m.PROPERTY ) ) )

where PROPERTY is a property of the object that is the model. What is the correct syntax for defining Model.Id if the Model is a System.Data.DataTable and the Id column in the DataTable is TableId?

In other words, model.Id( m => ??? ).

I have tried, model.Id( m => Model.PrimaryKey ), which seems to satisfy the requirement that model.Id be set, but the Update Action (.Update(update => update.Action("MyUpdateMethod", "MyController")) doesn't ever hit, so I think there must still be something wrong.

4

2 回答 2

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)
     )
于 2013-09-17T18:42:23.297 回答
0

我有一个答案,虽然它不是真正的光滑。它有几个部分。

首先,为了编辑,我必须设置一个 Model.Id,这是我最初的问题。答案很简单,model.Id( "KEY_COLUMN_NAME" )在 .DataSource.Model 方法中。但是,这还不足以解决更新不发生的问题。Telerik Support 建议我需要定义一个自定义数据对象 (POCO),该对象具有与 DataTable 具有列的所有相同属性。该 POCO 成为更新的类型

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

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

于 2013-09-18T15:51:26.243 回答