2015-08-13 4 views
0

Мы завершаем переход с Telerik MVC Extensions в Kendo, и у меня возникла проблема с попыткой применить статический фильтр pre к сетке кендо.Kendo Grid, Set simple filter

Я пытаюсь отфильтровать строки, содержащие слово «Архивировано» в столбце состояния.

Как это сделать с помощью Kendo?

Ниже метод Telerik MVC расширения, которые я пытаюсь преобразовать

@(Html.Telerik().Grid<MyViewModel>() 
    .Columns(columns => 
    {      
     columns.Bound(m => m.Id); 
     columns.Bound(m => m.Status);    
     ... 
    }) 
    .DataBinding(......)    
    .Filterable(filtering => filtering.Filters(filters => 
    { 
     filters.Add(m => m.Status).IsNotEqualTo("Archived"); 
    }))    
)  
+0

Вы пытаетесь сделать этот фильтр, прежде чем извлекать источник данных, то есть. вы не хотите, чтобы сервер представил результаты для «Архивированного» или вытащил данные обратно, затем фильтр. Также вы выполняете фильтрацию на стороне сервера или на стороне клиента? –

+0

Я хочу отменить данные, а затем отфильтровать на клиентском – BBR

ответ

0

Вот один из способов сделать это с клиентской стороны после возвращения первоначального DATASOURCE demo showing client side filtering

В этом примере, который в версии javaScript мы используем событие DataBound, и когда сетка восстанавливается до dataSource, мы запускаем эту функцию:

function onDataBound(e){ 
      var grid = $('#grid').data('kendoGrid'); 

      if(initialFilter) 
      { 
       grid.dataSource.filter({ field: "ShipName", 
              operator: "contains", 
              value: "Han" }); 
       initialFilter = false; 
      } 

      } 

initialFilter - глобальная переменная, которая является bool, которая позволит нам управлять этой функцией и запускать ее один раз. В противном случае это будет продолжаться в цикле.

затем применяя фильтр к источнику данных, у нас есть три части к нему.

{{fieldName},{operator},{value}}

Таким образом, в этом примере я смотрю на ShipName, фильтрование, где значение Han содержится в ShipName.

прикрепить это с помощью MVC версии просто добавьте его в опции событий т.е.

.Events(event => event.DataBound("onDataBound")) 

еще один способ сделать это, чтобы применить фильтр во время инициализации сетки и таким образом данные фильтрованной без чтобы решить проблемы, представленные первой версией. filter at initialization

С этой версией я просто изменял DataSource и применяя тот же фильтр, как часть установки DataSource как так:

dataSource: { 
    type: "odata", 
    transport: { 
     read: "//demos.telerik.com/kendo-ui/service/Northwind.svc/Orders" 
    }, 
    schema: { 
     model: { 
      fields: { 
       OrderID: { 
        type: "number" 
       }, 
       Freight: { 
        type: "number" 
       }, 
       ShipName: { 
        type: "string" 
       }, 
       OrderDate: { 
        type: "date" 
       }, 
       ShipCity: { 
        type: "string" 
       } 
      } 
     } 
    }, 
    pageSize: 20, 
    serverPaging: true, 
    serverFiltering: true, 
    filter: { 
     field: "ShipName", 
     operator: "contains", 
     value: "Han" 
    } 
}, 

Таким образом, в конфигурации источника данных вы бы добавить что-то вроде этого:

.Read(read => read.Action("","")) 
.Model(model => {model.Id("ShipId");}) 
.Filter(filter => 
       { 
        filter.Add(f => f.ShipName).Contains("Han"); 
       }) 

Надеюсь, это даст вам хорошую отправную точку, но если вам нужна дополнительная информация, дайте мне знать, и я расширю ответ для вас.

Смежные вопросы