我正在尝试默认要在页面加载时过滤的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);
}
}
答案 0 :(得分:1)
将我的初始评论更新为答案。实质上,如果使用过滤器定义数据源,则会将数据源定义为初始状态,并且用户仍然可以正常使用UI /控件更改过滤器。
对于javascript实现,这可能如下所示:
dataSource: {
// ... other config
filter: { field: "YourColumn", operator: "equals", value: false }
}
如果您正在使用列菜单过滤,则此过滤器将显示供用户更改 - 您只定义了其初始状态。
您提到您正在使用MVC实现。我之前没有使用过这些助手。我希望它只是使用类似的配置方法的问题,但在你看来,文档似乎并不清楚。我会从这里开始:
http://docs.telerik.com/aspnet-mvc/helpers/grid/configuration#filter
所以,也许它最终看起来像这样:
.DataSource(dataSource => dataSource
.Filter(filters =>
{
filters.Add(f => f.YourColumn).Equals(false);
}