如何在Kendo Grid中设置外键列的默认值?

时间:2015-05-21 06:18:44

标签: kendo-ui kendo-grid kendo-asp.net-mvc

在Kendo Grid中有一个外键列,我从ViewData检索选择列表。网格的编辑模式为InLine

当我想添加新记录时,会选择第一个项目。如果我没有更改它并且不选择任何其他内容,则列的值将在服务器端null

如何为此列指定默认值?请注意,ID是用户生成的,我无法猜出第一个项目的ID。

这是网格:

@(Html.Kendo().Grid<InvtMat>()
    .Name("BOM")
    .Columns(columns =>
    {
        columns.ForeignKey(x => x.CGoodCode, (IEnumerable)ViewData["Goods"], "Id", "Text");
        // removed for brevity
        columns.Command(command => { command.Edit(); command.Destroy(); });
    })
    .ToolBar(toolbar =>
    {
        toolbar.Create();
    })
    .Editable(edit => edit.Mode(GridEditMode.InLine))
    .DataSource(ds => 
        ds.Ajax()
        .Model(model =>
        {
            model.Id(x => x.CGoodCode);
            model.Id(x => x.CGoodCode1);
        })
    )
)

1 个答案:

答案 0 :(得分:1)

您可以在DataSource.Model部分内设置Grid模型的默认值。

以下是一个例子:

.DataSource(ds => 
    ds.Ajax()
    .Model(model =>
    {
            model.Id(x => x.CGoodCode);
            model.Field(x => x.CGoodCode).DefaultValue(0);
    })
)

因为你不知道你必须在那里写什么默认值,所以你应该在定义Grid之前先找到它。我想你的控制器里有这样的东西:

var goods = // get goods from DB.
var goodsDV= goods.First().Id;

ViewData["Goods"] = goods;
ViewData["GoodsDefaultValue"] = goodsDV;

或者您也可以在剃须刀视图中执行此操作

@{
    var firstGood = ((IEnumerable<Good>)ViewData["Goods"]).First();
    ViewData["GoodsDefaultValue"] = firstGood.Id;
}

然后像这样使用它

model.Field(x => x.CGoodCode).DefaultValue(ViewData["GoodsDefaultValue"]);

好吧?!

相关问题