在 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 自定义过滤器菜单在第一次过滤或清除后中断