【问题标题】:Using a dynamic type in an editable Kendo UI Grid在可编辑的 Kendo UI Grid 中使用动态类型
【发布时间】:2015-09-02 20:17:17
【问题描述】:

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

所以我不能只创建一个包含所有可能列的模型。相反,我使用dynamic 类型将数据交给视图。这对我添加到 Kendo Grid 的每个选项都非常有效 - 除了使其可编辑。为了使示例更易于理解,我省略了所有不相关的内容(例如 .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 函数,它不能用于动态对象。我不知道如何解决这个问题。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我将把这种可能性留在脑海中,但我并不想切换到在 js 中创建网格,主要是出于可维护性的原因。 (我们没有太多自定义 js 代码,希望保持这种方式)
    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2017-09-07
    • 2019-08-09
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多