在可编辑的Kendo UI Grid中使用动态类型

时间:2015-06-17 14:16:27

标签: c# asp.net kendo-ui kendo-grid dynamictype

我目前正在开展一个项目,我需要创建一个包含用户选择的列的网格。这些列可以源自数据库上下文中的任意表。更糟糕的是,数据库由不同的软件管理,表和表字段可以经常更改。在可预见的未来,这不会改变。

所以我不能只创建一个包含所有可能列的模型。相反,我使用dynamic类型将数据传递给视图。这对我添加到剑道网格中的每个选项都非常有效 - 除了使其可编辑。为了使示例更容易理解,我遗漏了所有不相关的内容(如.Sortable()或通过Ajax读取数据的方法)

ColumnData[]是显示的所有列的数组,包含其类型和名称

@model ColumnData[]
@(Html.Kendo().Grid<dynamic>()
        .Name("grid")
        .Columns(columns =>
        {
            for (var i = 0; i < Model.Length; i++)
            {
                columns.Bound(Model[i].Type, Model[i].Name);
            }
        })
        //.Editable(editable => editable.Mode(GridEditMode.InLine))
        .DataSource(dataSource => dataSource
            .Ajax()
        )
)

这是按预期工作,直到我取消注释.Editable部分。然后它抛出一个异常:

System.InvalidOperationException: Templates can be used only with field access, property
    access, single-dimension array index, or single-parameter custom indexer expressions

我的猜测是,它在某处使用lamba函数,不能与动态对象一起使用。我不知道,我怎么能解决这个问题。

1 个答案:

答案 0 :(得分:0)

由于无法在运行时使网格可编辑(see here),我认为您应该在客户端初始化整个网格。 您可以找到一个很好的示例示例here