Kendo Ui Grid Filterable。如何更改过滤器操作符?

时间:2015-09-30 11:04:07

标签: 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)
        )
)

我有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")
            )
        )
    )  

它没有提供预期的结果。

有关如何解决此问题的建议?

1 个答案:

答案 0 :(得分:3)

  

Kendo Ui Grid Filterable。如何更改过滤器操作符?

     

...

     

尝试更改&#34;等于&#34;的默认过滤器to&#34;包含&#34;

     

...

     

但仅适用于.Filterable(f =&gt; 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采用默认值并且不会更改顺序 - 因此其中一个需要空格。