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

时间:2014-01-07 08:34:48

标签: kendo-ui kendo-grid kendo-asp.net-mvc

假设我有这样的数据:

[
    {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。< / p>

编辑模式是InCell。

1 个答案:

答案 0 :(得分:2)

在In-Cell编辑方面,这有点棘手。首先,您需要将编辑事件绑定到网格。

.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);
        }
    }
}