3

我在页面上有 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

谢谢。

4

2 回答 2

6

我想出了如何使用外键列的 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)

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

function filterChargeTypes()
{
    return {
        productID: $("#ProductID").val()
    };
}

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

public ActionResult FilterProducts(string productID)
{
    // do your filtereing based on productID.
}

FilterProducts每次用户点击下拉菜单以获取过滤值时都会调用。

于 2013-08-07T21:20:14.813 回答
0

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

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()在网格上调用。

于 2014-07-31T03:16:47.697 回答