2012-09-13 32 views
5

Estoy convirtiendo una aplicación existente de las extensiones de Telerik MVC en el producto KendoUI más nuevo. Estoy usando el control de cuadrícula ¿Cómo especifico los valores predeterminados para las columnas cuando agrego una nueva fila a la grilla?IU de Kendo con valores predeterminados de ASP.NET MVC3 al agregar una fila a la cuadrícula

Con las extensiones antiguas Telerik MVC, hice lo siguiente:

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

El defaultItem de mi modelo era mi defecto para filas agregadas. Entonces, ¿cómo hago esto con Kendo?

Respuesta

9

Yo yo yo compañero,

Es necesario especificar el valor por defecto para cada uno de los campos a través de la configuración del modelo dataSource

Este es un ejemplo que puede utilizar;)

@(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

I escribió un método de extensión que logra la funcionalidad principal de DefaultDataItem(). Se lee todas las propiedades de un elemento predeterminado y establece el Field() y DefaultValue() en la definición del modelo de fuente de datos:

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; 
    } 
} 

utilizar de esta manera:

@(Html.Kendo().Grid<MyEntity>() 
    ... 
    .DataSource(ds => ds 
     ... 
     .Model(model => 
     { 
      model.Id(n => n.Id); 
      model.DefaultDataItem(myDefaultEntity); 
     } 
    ) 
) 
Cuestiones relacionadas