Kendo UI 默认网格过滤器值

the*_*3RV 3 javascript razor kendo-ui

我正在尝试默认在页面加载时过滤 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);
    }
Run Code Online (Sandbox Code Playgroud)

我已尝试使用此解决方案在 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

sno*_*FFF 5

将我的初始评论更新为答案。从本质上讲,如果您使用过滤器定义数据源,这将定义处于初始状态的数据源,并且用户仍然可以照常使用 UI/控件更改过滤器。

对于 javascript 实现,这可能如下所示:

dataSource: {
    // ... other config
    filter: { field: "YourColumn", operator: "equals", value: false }
}
Run Code Online (Sandbox Code Playgroud)

如果您正在使用列菜单过滤,则此过滤器将显示供用户更改 - 您仅定义了其初始状态。

您提到您正在使用 MVC 实现。我以前没有用过那些助手。我希望这只是使用类似配置方法的问题,但就您而言,文档似乎并不明确。我会从这里开始:

http://docs.telerik.com/aspnet-mvc/helpers/grid/configuration#filter

所以,也许它最终看起来像这样:

.DataSource(dataSource => dataSource            
    .Filter(filters =>
    {       
        filters.Add(f => f.YourColumn).Equals(false);
    }
Run Code Online (Sandbox Code Playgroud)