Kendo Ui 网格可过滤。如何更改过滤器操作员?

0 asp.net-mvc filter kendo-ui kendo-grid

使用 MVC 包装器,我尝试将默认过滤器从“等于”更改为“包含”。我找到了一些例子,但它们都没有达到我想要的效果(或者我错误地使用了它们......)

好的,这是我的代码:

@(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)
        )
)
Run Code Online (Sandbox Code Playgroud)

我有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")
Run Code Online (Sandbox Code Playgroud)

他们将所有值放入每个过滤器的辅助文本框中。我试试这个:

    columns.Bound(c => c.CarNumber)
        .Filterable(ftb => ftb.UI("CarFilter"))
        .Filterable(ftb => ftb.Cell(c => c.Operator("contains")));
Run Code Online (Sandbox Code Playgroud)

但这仅适用于.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")
            )
        )
    )  
Run Code Online (Sandbox Code Playgroud)

它没有提供预期的结果。

关于如何解决这个问题的建议?

fre*_*n-m 5

Kendo Ui 网格可过滤。如何更改过滤器操作员?

...

尝试将默认过滤器从“等于”更改为“包含”

...

但仅适用于 .Filterable(f => 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 ")
                )
        ))
Run Code Online (Sandbox Code Playgroud)

s.Clear()重要的是按照您想要的顺序使用然后添加您想要的。

根据链接的论坛,如果值全部匹配,那么 kendo 会采用默认值并且不会更改顺序 - 因此其中之一需要一个空格。