2015-09-30 2 views
0

Использование MVC-обертки, я пытаюсь изменить фильтр по умолчанию с «равно» на «содержит». Я нашел несколько примеров, но ни один из них не делать то, что я хочу (или я неправильно использовать их ...)Kendo Ui Grid Filterable. Как я могу сменить оператор фильтра?

Итак, это мой код:

@(Html.Kendo().Grid<Portal2.Areas.Coord.Models.ViewModel>() 
    .Name("grid") 
    .Columns(columns => 
    { 
     columns.Bound(c => c.OperationKey).Hidden(); 
     columns.Bound(c => c.Customer).Hidden(); 
     columns.Bound(c => c.CarNumber).Filterable(ftb => ftb.UI("CarFilter")); 
     columns.Bound(c => c.DriverName).Filterable(ftb => ftb.UI("DriverFilter")); 
     columns.Bound(c => c.PhoneNumber).Filterable(ftb => ftb.UI("PhoneFilter")); 
    }) 
    .Filterable(f => f.Extra(false)) 

    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Read(r => r 
      .Action("Read", "Operations2", new { startTime = (DateTime)ViewBag.startTime, endTime = (DateTime)ViewBag.endTime }) 
      ) 
     .PageSize(20) 
     .ServerOperation(false) 
     ) 
    .HtmlAttributes(new { style = "height: 740px" }) 
    .Scrollable() 
    .Groupable() 
    .Sortable() 

    .Pageable(pageable => pageable 
     .Refresh(true) 
     .PageSizes(true) 
     .ButtonCount(10) 
     ) 
) 

У меня есть JS функции:

function Filter(element, atr) { 
    var entityGrid = $(".k-grid").data("kendoGrid"); 
    var data = entityGrid.dataSource.data(); 
    var totalNumber = data.length; 
    var drivers = []; 
    for (var i = 0; i < totalNumber; i++) { 
     var currentDataItem = data[i][atr]; 
     if ($.inArray(currentDataItem, drivers) == -1) 
      drivers.push(currentDataItem); 
    } 
    element.kendoAutoComplete({ 
     dataSource: drivers 
    }); 
} 

function CarFilter(element) { 
    Filter(element, "CarNumber") 
} 
function DriverFilter(element) { 
    Filter(element, "DriverName") 
} 
function PhoneFilter(element) { 
    Filter(element, "PhoneNumber") 

Они помещают все значения в текстовое поле помощника в каждом фильтре. Я стараюсь это:

columns.Bound(c => c.CarNumber) 
     .Filterable(ftb => ftb.UI("CarFilter")) 
     .Filterable(ftb => ftb.Cell(c => c.Operator("contains"))); 

, но тот работает только для .Filterable(f => f.Mode(GridFilterMode.Row))

.Filterable(filterable => filterable 
     .Extra(false) 
     .Operators(operators => operators 
      .ForString(str => str.Clear() 
       .StartsWith("Starts with") 
       .IsEqualTo("Is equal to") 
       .IsNotEqualTo("Is not equal to") 
      ) 
     ) 
    ) 

Он не дает ожидаемого результата.

Предложения о том, как исправить это?

ответ

3

Kendo Ui Grid Filterable. Как я могу сменить оператор фильтра?

...

попытка изменить фильтр по умолчанию из "равного" в "содержит"

...

но работает только для .Filterable (е => f.Mode (GridFilterMode .Row))

Итак, как изменить операторы фильтра в колонке:

http://www.telerik.com/forums/grid-column-filter-default-method#mbwcoHyzT02G-SZmRs35YQ

columns.Bound(m => m.Field) 
    .Filterable(f => 
     f.Operators(
      o => o 
       .ForString(s => 
        s.Clear() 
        .Contains("Contains") 
        .DoesNotContain("Does not contain") 
        .IsEqualTo("Is equal to") 
        .IsNotEqualTo("Is not equal to") 
        .StartsWith("Starts with") 
        .EndsWith("Ends with ") 
       ) 
     )) 

Важно, чтобы использовать s.Clear() затем добавить те, которые вы хотите в порядке, вы хотите их.

В соответствии с связанным форумом, если все значения совпадают, тогда kendo принимает значения по умолчанию и не изменяет порядок - поэтому одному из них требуется пространство.