2017-08-14 176 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