【问题标题】:Kendo UI Grid dropdown with Foreign key带有外键的 Kendo UI Grid 下拉菜单
【发布时间】:2015-10-22 15:53:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: kendo-ui kendo-grid


    【解决方案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"]))
    

    【讨论】:

    • 感谢您让我摆脱了头痛。我花了太多时间在demos.telerik.com/aspnet-mvc/grid/foreignkeycolumn 上演示示例,该站点上的那些演示代码不起作用。这让我浪费了很多时间。我希望我能阅读/知道您发布的主题。