将行添加到网格时,带有ASP.NET MVC3的Kendo UI默认值

时间:2012-09-13 12:38:07

标签: telerik kendo-ui

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

使用旧的Telerik MVC扩展,我做了以下内容:

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

我的模型的defaultItem是我添加行的默认值。那么我如何使用剑道呢?

3 个答案:

答案 0 :(得分: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);
})
)

答案 1 :(得分:0)

MVC扩展中的DefaultDataItem does not currently exist。但是,仍然可以without using the MVC extensions作为解决方法。

答案 2 :(得分:0)

我编写了一个扩展方法来完成DefaultDataItem()的核心功能。它读取默认项的每个属性,并在数据源模型定义中设置Field()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);
        }
    )
)