【发布时间】:2018-01-22 15:36:36
【问题描述】:
我正在尝试默认在页面加载时过滤 Kendo UI 网格。我有一列包含布尔值,我只需要在页面加载时显示带有“false”的值,但如果他们清除过滤器,则允许用户查看它们。
示例:http://www.telerik.com/forums/adding-filters-to-grid-s-source
function updateSearchFilters(grid, field, operator, value) {
var newFilter = { field: field, operator: operator, value: value };
var dataSource = grid.data("kendoGrid").dataSource;
var filters = null;
if ( dataSource.filter() != null){
filters = dataSource.filter().filters;
}
if ( filters == null ) {
filters = [newFilter];
}
else {
var isNew = true;
var index = 0;
for(index=0; index < filters.length; index++) {
if (filters[index].field == field) {
isNew = false;
break;
}
}
if ( isNew){
filters.push(newFilter);
}
else {
filters[index] = newFilter;
}
}
dataSource.filter(filters);
}
我已尝试使用此解决方案在 DataBound 事件上调用函数,但是当用户清除过滤器然后尝试对其他过滤器进行分组或设置时,此过滤器会重新出现。我在视图中使用 Razor 语法,并希望可以在那里设置一些东西。
更新:目前,我已经将示例函数包装在一个类级别变量的 if 中,该变量根据之前是否被调用过设置为 true/false,但我觉得这是一个原始的解决方案。
function onDataBind(grid, field, operator, value){
if(!alreadyFiltered) //class level variable that is set to true after dataSource.filter(filters);
updateSearchFilters(grid, field, operator, value);
}
}
【问题讨论】:
-
我认为你让它变得比必要的更复杂。你不能把过滤器放在你的数据源定义上吗?然后,当绑定到网格时,该列被过滤。然后,使用 UI,用户仍然可以清除此过滤器 - 您的数据源定义只是最初设置它。
-
添加到我的初始评论中,例如:filter: { field: "YourColumn", operator: "equals", value: false } 用于您的数据源配置。
-
您为我指明了正确的方向,这就是我要寻找的。但正如问题中所述,我使用的是剃刀语法,因此过滤器扩展不接受 JSON 数组。它包含
Action<DataSourceFilterDescriptorFactory<SecurityMinorTypeViewModel>>(),我发现很难找到任何关于这到底是什么的文档。 -
我之前遗漏的另一条信息是我正在使用 Telerik dll。我建议将您的评论作为答案,以便我将其标记为正确。
标签: javascript razor kendo-ui