carlg
carlg

Reputation: 1812

Kendo UI with ASP.NET MVC3 default values when adding row to grid

I am converting an existing app from Telerik MVC extensions to the newer KendoUI product. I am using the grid control. How do I specify the default values for the columns when adding a new row to the grid?

With the old Telerik MVC extensions, I did the following:

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

The defaultItem of my model was my default for added rows. So how do I do this with Kendo?

Upvotes: 5

Views: 5227

Answers (3)

Matthias
Matthias

Reputation: 3569

I wrote an extension method that accomplishes the core functionality of DefaultDataItem(). It reads every property of a default item and sets the Field() and DefaultValue() in the data source model definition:

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

Use it like this:

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

Upvotes: 0

Petur Subev
Petur Subev

Reputation: 20223

Yo yo yo mate,

You need to specify default value for each of the fields via the dataSource model configuration

Here is an example you can use ;)

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

Upvotes: 10

Sean Chase
Sean Chase

Reputation: 1303

DefaultDataItem does not currently exist in the MVC extensions specifically. However, it is still possible without using the MVC extensions as a work-around.

Upvotes: 0

Related Questions