使用外键的Kendo UI Grid下拉列表

时间:2015-10-22 15:53:44

标签: kendo-ui kendo-grid

我应该在Telerik论坛上问过这个问题,但是在那里浏览了很多答案,并且对Telerik给予了应有的尊重,我觉得这将是徒劳的,我可以期待更好更快的答案。所以我走了:

我正在使用Kendo UI Grid控件并在可编辑的下拉列表单元格中显示值。但是它已经取消了内置的过滤功能,因为它不是开箱即用的。现在我陷入了实现这个使用外键的唯一方法; http://demos.telerik.com/aspnet-mvc/grid/foreignkeycolumn

示例中缺少一些位,如PopulateCategories()函数以及要放入MVC EditorTemplate的代码。

是否有人尝试并成功显示过滤器?我可以提供我的代码,但我认为这不是问题的一部分,因为代码中没有任何错误。我要问的是如何使用Telerik提供的解决方案使用下拉列表模板实现过滤。

1 个答案:

答案 0 :(得分:1)

希望它可以帮助某人。上面链接中提供的示例中缺少以下位(我使用了我的代码来传达丢失的位):

第一

而不是:

columns.ForeignKey(p => p.CategoryID, (System.Collections.IEnumerable)ViewData["categories"], "CategoryID", "CategoryName")
            .Title("Category").Width(150)

也使用EditorTemplateName属性:

columns.ForeignKey(p => p.Region.RegionId, (System.Collections.IEnumerable)ViewData["Regions"], "RegionId", "RegionName").Title("Region").EditorTemplateName("RegionsTemplate");

第二

继续使用复杂模型,否则添加新记录功能将不起作用:

所以而不是

.Model(model =>
        {
            model.Id(p => p.ProductID);
            model.Field(p => p.ProductID).Editable(false);
            model.Field(p => p.CategoryID).DefaultValue(1);       
        })

同时使用外键模型和复杂模型:

.Model(model => { 
                model.Id(p => p.FunctionLevelRegionMappingId);
                model.Field(p => p.FunctionLevelRegionMappingId).Editable(false);
                model.Field(p => p.Region.RegionId).DefaultValue(1);
                model.Field(p => p.Region).DefaultValue(
                    ViewData["DefaultRegion"] as GlobalLossAnalysisTool.Web.Areas.Administration.Models.RegionDto);
            })

第三

在示例中缺少ProductViewModel。这可以从http://demos.telerik.com/aspnet-mvc/grid/editing-custom引用。这个模型没有变化。

对模板的更改:

示例中缺少模板,但可以从链接http://demos.telerik.com/aspnet-mvc/grid/editing-custom推断出来。从以下位置更改模板:

@model Kendo.Mvc.Examples.Models.CategoryViewModel

@(Html.Kendo().DropDownListFor(m => m)
        .DataValueField("CategoryID")
        .DataTextField("CategoryName")
        .BindTo((System.Collections.IEnumerable)ViewData["categories"])
)

要:

@using Kendo.Mvc.UI

@(Html.Kendo().DropDownListFor(m => m)
    .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"]))