5

我正在将现有应用程序从 Telerik MVC 扩展转换为更新的 KendoUI 产品。我正在使用网格控件。向网格添加新行时,如何指定列的默认值?

使用旧的 Telerik MVC 扩展,我做了以下事情:

.Editable(editing=>editing.Mode(GridEditMode.InCell).DefaultDataItem(Model.defaultItem))

我的模型的 defaultItem 是我添加行的默认值。那么我该如何用剑道做到这一点呢?

4

3 回答 3

10

哟哟哟伙计

您需要通过 dataSource 模型配置为每个字段指定默认值

这是您可以使用的示例;)

@(Html.Kendo()
.Grid<TestModel>()
.Name("SomeOtherGridName")
.DataSource(ds => ds.Ajax().Read("test", "test").Model(
    x => {
        x.Field(c => c.Val1).DefaultValue(5);
        x.Field(c => c.Val2).DefaultValue("cool!");
    }
 ))
.Columns(columns =>
{
    columns.Bound(c => c.Val1);
    columns.Bound(c => c.Val2);
})
)
于 2012-09-13T19:52:35.340 回答
0

DefaultDataItem当前不存在于 MVC 扩展中。但是,如果不使用 MVC 扩展作为解决方法,它仍然是可能的。

于 2012-09-13T16:46:01.513 回答
0

我写了一个扩展方法来完成DefaultDataItem(). 它读取默认项的每个属性并在数据源模型定义中设置Field()and :DefaultValue()

public static class DataSourceModelDescriptorFactoryExtensions
{
    public static DataSourceModelDescriptorFactory<TModel> DefaultDataItem<TModel>(
        this DataSourceModelDescriptorFactory<TModel> dataSourceModelBuilder,
        TModel defaultDataItem) where TModel : class
    {
        var propertyInfos = typeof(TModel).GetProperties();
        foreach (var propertyInfo in propertyInfos)
        {
            dataSourceModelBuilder
                .Field(propertyInfo.Name, propertyInfo.PropertyType)
                .DefaultValue(propertyInfo.GetValue(defaultDataItem));
        }

        return dataSourceModelBuilder;
    }
}

像这样使用它:

@(Html.Kendo().Grid<MyEntity>()
    ...
    .DataSource(ds => ds
        ...
        .Model(model =>
        {
            model.Id(n => n.Id);
            model.DefaultDataItem(myDefaultEntity);
        }
    )
)
于 2015-06-09T06:05:50.817 回答