我试图让kendoui网格支持使用下拉列表作为过滤器进行过滤。我希望用户能够从所有可用选项的列表中进行选择,而不是要求他们手动输入过滤器。
我有一个像这样的共享数据源:
var transport = {
read: {
url: "/api/account/changes",
type: "POST",
dataType: "json"
}
};
此方法返回如下所示的对象:
public class Response {
public IEnumerable Data { get;set; }
public int Count { get; set; }
public IEnumerable Users { get; set; }
}
然后我将两个数据源绑定到一个传输:
var masterDataSource = new kendo.data.DataSource({
transport: transport,
schema: {
data: "Data",
total: "Count",
model: {
id: "Id",
fields: {
Id: { type: "number" },
User: { type: "string" },
// other columns
Value: { type: "string" }
}
}
},
pageSize: 20,
serverPaging: true,
serverFiltering: true,
serverSorting: true
});
var usersDataSource = new kendo.data.DataSource({
transport: transport,
schema: {
data: "Users"
}
});
我的网格绑定到masterDataSource:
$("#grid").kendoGrid({
dataSource: masterDataSource,
height: 800,
navigatable: true,
resizable: true,
scrollable: true,
sortable: {
mode: "single",
allowUnsort: false
},
filterable: {
extra: false,
operators: {
string: {
startswith: "Starts with",
eq: "Is equal to",
neq: "Is not equal to"
},
date: {
greaterthan: "Greater than",
lessthan: "Less than"
}
}
},
pageable: true,
columns: [
{
field: "User",
title: "User",
width: 130,
filterable: {
ui: userFilter
}
},
// other columns
{
field: "Value",
title: "Value",
filterable: false,
width: 70
}
]
});
然后我定义了一个代表过滤器的函数:
function userFilter(element) {
console.log("setting up user filter");
element.kendoDropDownList({
dataSource: usersDataSource,
optionLabel: "--Select One--"
});
console.log("set up user filter");
}
但是,我的userFilter函数从未被调用过,我得到了通用列过滤,而不是下拉列表过滤器。这个布局看起来很像http://demos.kendoui.com/web/grid/filter-menu-customization.html的过滤示例,但我似乎无法让下拉列表像他们一样工作。
感谢您对此的帮助。
答案 0 :(得分:0)
问题在于您永远不会调用userFilter函数。在您的可过滤属性下,您需要添加一个ui属性并将其设置为您要调用的函数。像这样:
filterable: {
ui: userFilter
}
希望有所帮助。