我正在将现有的应用程序从Telerik MVC扩展转换为更新的KendoUI产品。我正在使用网格控件。在向网格添加新行时,如何指定列的默认值?
使用旧的Telerik MVC扩展,我做了以下内容:
.Editable(editing=>editing.Mode(GridEditMode.InCell).DefaultDataItem(Model.defaultItem))
我的模型的defaultItem是我添加行的默认值。那么我如何使用剑道呢?
答案 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);
}
)
)