Kendo UI 默认网格过滤器值

Posted

技术标签:

【中文标题】Kendo UI 默认网格过滤器值【英文标题】:Kendo UI Default Grid Filter value 【发布时间】: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&lt;DataSourceFilterDescriptorFactory&lt;SecurityMinorTypeViewModel&gt;&gt;(),我发现很难找到任何关于这到底是什么的文档。 我之前遗漏的另一条信息是我正在使用 Telerik dll。我建议将您的评论作为答案,以便我将其标记为正确。 【参考方案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);
    

【讨论】:

就是这样。谢谢。 我需要根据在服务器上的 asp.net 会话中存储数据来加载过滤器。我可以将过滤器值加载到 ViewBag 中,将它们转储到隐藏的输入中,然后将它们加载到剑道网格数据源中吗? @tnk479 - 您可能想发布一个单独的问题,而不是将其埋在这些 cmets 中。但是,在高层次上,我认为你有几个选择。如果您使用的是 MVC 帮助程序,就像上面一样,您可以在您的 C# 控制器代码中执行此操作。或者,使用剃刀视图,您可以生成必要的 javascript。我认为您无需费心输入。 谢谢@snow_FFFFFF。我没有使用 MVC 助手,但我也在考虑在剃刀视图中生成 json 数据。谢谢你的建议。

以上是关于Kendo UI 默认网格过滤器值的主要内容,如果未能解决你的问题,请参考以下文章

从 Kendo UI 网格过滤器和自动填充中获取价值

kendo ui 网格数据源过滤器日期格式

Kendo UI 网格过滤器在引导模式中不起作用

带有模板的 Kendo UI 网格编号列不会过滤

MVC 中的 KENDO UI 网格:有没有办法在某些列上隐藏过滤器?

Kendo UI 按字段清除过滤器