我目前正在开展一个项目,我需要创建一个包含用户选择的列的网格。这些列可以源自数据库上下文中的任意表。更糟糕的是,数据库由不同的软件管理,表和表字段可以经常更改。在可预见的未来,这不会改变。
所以我不能只创建一个包含所有可能列的模型。相反,我使用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函数,不能与动态对象一起使用。我不知道,我怎么能解决这个问题。