InCell 编辑模式下的 Kendo UI ASP.Net MVC ForeignKey 列 DataSource

Posted

技术标签:

【中文标题】InCell 编辑模式下的 Kendo UI ASP.Net MVC ForeignKey 列 DataSource【英文标题】:Kendo UI ASP.Net MVC ForeignKey column DataSource in InCell Edit mode 【发布时间】:2013-08-08 23:31:47 【问题描述】:

我在页面上有 Kendo Grid 和 ForeignKey 列。 ForeignKey 列使用 ViewData 填充,如下所述。

column.ForeignKey(x => x.ProductID, (List<Product>)ViewData["products"], "ID", "ProdName");

网格在批处理(InCell)模式下是可编辑的,如下所示...

.Editable(editable => editable.Mode(GridEditMode.InCell)

我想在页面加载后根据在网格之外定义的其他下拉列表中选择的值修改网格中 ProductID 列的集合。

我怎样才能做到这一点?我可以用 jQuery 来做吗?

我在这里找到的类似示例... http://www.telerik.com/community/forums/aspnet-mvc/grid/cascading-dropdowns-in-grid-edit---foreignkey-columns.aspx

谢谢。

【问题讨论】:

【参考方案1】:

我想出了如何使用外键列的 EditorTemplate 过滤产品下拉列表。

这是我对产品的列定义

c.ForeignKey(x => x.ProductID, (List<Product>)ViewData["products"], "ID", "ProdName").EditorTemplateName("ProductIDEditor");

这是 Product 的 编辑器模板,ProductIDEditor.cshtml

@using Kendo.Mvc.UI

@(Html.Kendo().DropDownListFor(m => m)
    .AutoBind(false)
    .OptionLabel("Select a value...")
    .DataTextField("ProdName")
    .DataValueField("ID")
    .DataSource(dataSource =>
    
        dataSource.Read(read => read.Action("FilterProducts", "Home").Data("filterProducts"))
        .ServerFiltering(true);
    )                                   
)
@Html.ValidationMessageFor(m => m)

在我的主 VIEW Index.cshtml 中,我添加了 filterProducts javascript 处理程序,它将 productID 的 JSON 对象传递给控制器​​。

function filterChargeTypes()

    return 
        productID: $("#ProductID").val()
    ;

这是监听过滤事件的控制器...

public ActionResult FilterProducts(string productID)

    // do your filtereing based on productID.

FilterProducts 会在用户每次点击下拉框获取过滤值时被调用。

【讨论】:

这个答案很有帮助。我正在尝试做同样的事情,但不同的是我使用的是弹出编辑器。在这种情况下,javascript过滤函数返回的id总是空的。【参考方案2】:

您不需要编辑器模板。没有它,它将绑定到下拉列表。您可以像以前一样使用它,只需减去模板:

c.ForeignKey(x => x.ProductID, (List<Product>)ViewData["products"], "ID", "ProdName")

c.ForeignKey(x => x.ProductID, (System.Collections.IEnumerable)ViewData["products"], dataFieldValue: "ID", dataFieldText: "ProdName")

对于过滤,您只需在网格上调用.Filterable()

【讨论】:

问题不在于过滤列。 @ataravati,真的吗?似乎他问“我想根据在网格之外定义的其他下拉列表中选择的值加载页面后修改网格中 ProductID 列的集合。”对我来说,这意味着过滤,即使他没有说“过滤”。由于还有其他语法错误,我假设他不会说英语,并且可能不知道过滤这个词。但是在我看来,使用下拉菜单修改页面上的集合来表示过滤。另一部分似乎他需要弄清楚如何在页面上显示 FK 列,我的示例显示了这一点。 抱歉!看他自己的回答,我觉得原来的问题还不够清楚。 那么如果你没有-1,那是谁呢? 我做到了。但是,我不能收回它。

以上是关于InCell 编辑模式下的 Kendo UI ASP.Net MVC ForeignKey 列 DataSource的主要内容,如果未能解决你的问题,请参考以下文章

编辑网格时,如何按行禁用特定字段? Kendo UI ASP.Net MVC 包装器

Kendo Grid 如何以编程方式聚焦网格单元并阻止选择文本

如何在 Kendo UI 网格中创建自定义删除/销毁按钮/命令?

Kendo Grid 在单元格编辑后更新所有行

Kendo Grid:外键下拉菜单在更新后不更新网格单元格

如何在 kendo.ui.grid 中创建自定义 kendo.ui.Window 以进行编辑