我想在多个列上过滤下拉列表数据。目前,它基于一列过滤数据。
是否有任何自定义方式来基于多列过滤数据?
代码:
$('<input data-bind="value:' + options.field + '"/>')
.appendTo(container)
.kendoDropDownList({
filter: "contains",
dataTextField:currentComboEditor.fieldName,
headerTemplate: dropdownTemplateHTML.getHeaderHTML(dropdownMetadata.columns),
valueTemplate: '<span>#:data.'+currentComboEditor.fieldName+'#</span>',
template: dropdownTemplateHTML.getRowTemplate(dropdownMetadata.columns),
dataValueField: currentComboEditor.fieldName,
dataSource: {
data: source
}
});
[没有内置方法可以过滤多列上的kendoDropDownList
。您可以执行此操作的唯一方法是创建自己的过滤器:
var filterValue = "search me";
var newFilter = {
logic: "or",
filters: [
{ field: "FieldA", operator: "contains", value: filterValue },
{ field: "FieldB", operator: "contains", value: filterValue },
{ field: "FieldC", operator: "contains", value: filterValue }
]
};
kendoDropDownList.dataSource.filter(newFilter);
根据您的需要,您必须将此代码挂接到正确的事件上。
覆盖Kendo dropdownlist filtering event
kendoDropDownList.bind("filtering", function(e) {
// ignore space
var filterValue = e.sender._prev;
if(filterValue.trim)filterValue = filterValue.trim();
var newFilter = {
logic: "or",
filters: [
{ field: "FieldA", operator: "contains", value: filterValue },
{ field: "FieldB", operator: "contains", value: filterValue },
{ field: "FieldC", operator: "contains", value: filterValue }
]
};
this.dataSource.filter(newFilter);
// important: stop default filter
e.preventDefault();
});