2012-09-13 49 views
5

我正在将Telerik MVC扩展中的现有应用程序转换为更新的KendoUI产品。我正在使用网格控件。将新行添加到网格时,如何为列指定默认值?在将行添加到网格时使用ASP.NET MVC3缺省值的Kendo UI

随着老Telerik的MVC扩展,我做了以下内容:

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

我的模型的defaultItem是我默认添加的行。那么我怎么和剑道一起做这个?

回答

9

呦呦呦队友,

你需要为每个通过数据源模型配置

下面的字段指定默认值是您可以使用一个例子)

@(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); 
}) 
) 
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); 
     } 
    ) 
)