2012-09-13 22 views
5

Telerik MVC拡張から新しいKendoUI製品に既存のアプリケーションを変換しています。私はグリッドコントロールを使用しています。グリッドに新しい行を追加するときに列のデフォルト値を指定するにはどうすればよいですか?古いTelerik MVCの拡張子を持つ剣道UI with ASP.NET MVC3グリッドに行を追加するときの既定値

、私は次のようでした。私のモデルの

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

defaultItemが追加された行のための私のデフォルトでした。だから私は剣道でこれをどうやってやるのですか?

答えて

9

ヨーヨーヨーヨー仲間、あなたがここの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); 
}) 
) 
0

I 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); 
     } 
    ) 
) 
関連する問題