在 Kendo Grid 中编辑时过滤 ForeignKey 的可用值

Posted

技术标签:

【中文标题】在 Kendo Grid 中编辑时过滤 ForeignKey 的可用值【英文标题】:Filter ForeignKey's available values on edit in Kendo Grid 【发布时间】:2014-01-24 20:51:34 【问题描述】:

假设我有这样的数据:

[
    ID: 1, SomeForeignKeyID: 1, FkLimitation: "Local",
    ID: 2, SomeForeignKeyID: 532, FkLimitation: "Foreign"
]

Kendo Grid 正在使用这些数据:

columns.Bound(m => m.ID);
columns.ForeignKey(p => p.SomeForeignKeyID, ViewBag.ForeignKeys as IEnumerable<object>, "Value", "Name");

问题来了:如何限制 ForeignKey 列中的可用值?例如。 - 如果 FkLimitation == "Local" 我希望 ForeignKey 允许选择值 1/2/3/4,如果 FkLimitation == "Foreign" 我希望 ForeignKey 允许选择值 532/232/432。

编辑模式为 InCell。

【问题讨论】:

【参考方案1】:

在单元格内编辑方面有点棘手。首先,您需要将编辑事件绑定到网格。

.Events(events => events.Edit("gridEdit"))

在事件处理程序中,您需要找出当前行的数据项。之后,您可以根据“FkLimitation”的值创建不同的过滤器,并将其应用于下拉列表的数据源。

function gridEdit(e) 
    var inputLength = e.container.find("input[name='SomeForeignKeyID']").length;
    if (inputLength > 0)  // user is currently editing the SomeForeignKeyID column
        var dataItem = null;
        var row = $('#SomeForeignKeyID').closest('tr');
        if (row.length > 0) // retrieve the data item of the current row
            dataItem = $("#gridId").data("kendoGrid").dataItem(row);
        if (dataItem != null) 
            var filter = null;
            if (dataItem.FkLimitation == 'Local') 
                filter = 
                    logic: 'or',
                    filters: [
                         field: 'Value', operator: 'eq', value: 1 ,
                         field: 'Value', operator: 'eq', value: 2 ,
                         field: 'Value', operator: 'eq', value: 3 ,
                         field: 'Value', operator: 'eq', value: 4 
                    ]
                ;
             else if (dataItem.FkLimitation == 'Foreign') 
                filter = 
                    logic: 'or',
                    filters: [
                         field: 'Value', operator: 'eq', value: 532 ,
                         field: 'Value', operator: 'eq', value: 232 ,
                         field: 'Value', operator: 'eq', value: 432 
                    ]
                ;
            
            // filter/limit the values in the drop down list
            $('#SomeForeignKeyID').data('kendoDropDownList').dataSource.filter(filter);
        
    

【讨论】:

您可以通过e.model 直接访问模型,而不是从最近的行中获取它。

以上是关于在 Kendo Grid 中编辑时过滤 ForeignKey 的可用值的主要内容,如果未能解决你的问题,请参考以下文章

获取 Kendo UI Grid 中使用的过滤器

kendo grid过滤

Kendo UI Grid 自定义过滤器菜单在第一次过滤或清除后中断

如何在 Kendo Grid MVC 中编辑外部模型数据表单视图

Kendo Grid - 自定义编辑弹出窗口

Kendo Grid - 过滤行作为 kendoDropDown