2017-08-14 175 views
0

我想要默认Kendo UI网格在页面加载时被过滤。我有一个带有布尔值的列,我只需要在页面加载时显示带有“false”的列,但允许用户在清除过滤器时看到它们。Kendo UI默认网格过滤器值

实施例: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

我认为你可以使它比必要的更加复杂。你不能只把过滤器放在你的数据源定义上吗?然后,绑定到网格时,该列将被过滤。然后,使用用户界面,用户仍然可以清除此过滤器 - 您的数据源定义只是在最初设置它。 –

+0

要添加到我的初始评论中,请为您的数据源配置添加如下内容:filter:{field:“YourColumn”,operator:“equals”,value:false}。 –

+0

你已经指出了我正确的方向,这就是我正在寻找的。但正如在问题中所述,我使用的是剃刀语法,所以Filter扩展不包含JSON数组。它需要'Action >()',我发现很难找到任何围绕这个的文档。 – theB3RV

回答

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); 
    } 
+0

就是这样。谢谢。 – theB3RV