假设我有这样的数据:
[
{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。
答案 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);
}
}
}