在 Kendo UI Grid 中搜索所有列

Posted

技术标签:

【中文标题】在 Kendo UI Grid 中搜索所有列【英文标题】:Search All Columns in KendoUI Grid 【发布时间】:2012-12-05 23:05:23 【问题描述】:

我正在尝试为 kendoUI 网格创建一个搜索框。我已经能够开始基于一个字段进行搜索,但是我希望我的搜索框中的值可以搜索网格中的所有列。

function() 
            grid.data("kendoGrid").dataSource.filter(
                field: "ProductName",
                operator: "contains",
                value: $('#category').val()
            );

        

See js fiddle example

我在这里尝试使用 or 逻辑运算符:jsfiddle.net 但是我似乎无法让它工作....(请参阅或逻辑按钮)

【问题讨论】:

我尝试使用逻辑运算符但是它不起作用...$("#grid").data("kendoGrid").dataSource.filter( logic: "or", filters: [ field: "ProductName", operator: "ne", value: "fee", field: "ProductName", operator: "ne", value: "fi" ] ); 【参考方案1】:

如果你想匹配两个条件之一,我认为你应该说eqfee eqfi

我稍微修改了您的fiddle 以显示它。如果您在搜索框中输入内容,您将过滤匹配ProductName 列或QuantityPerUnit 的记录。

//change event
$("#category").keyup(function () 
    var val = $('#category').val();
    $("#grid").data("kendoGrid").dataSource.filter(
        logic  : "or",
        filters: [
            
                field   : "ProductName",
                operator: "contains",
                value   : val
            ,
            
                field   : "QuantityPerUnit",
                operator: "contains",
                value   : val
            
        ]
    );
);

重要提示:我必须将 jQuery 版本更新到 1.8.2 才能使其正常工作,以防万一我也将 KendoUI 更新到最新版本。

【讨论】:

【参考方案2】:

如果您不想担心列名,可以改用此代码。它适用于任何网格,并将搜索所有标记为可过滤的列,而无需指定硬编码的列名。此外,我添加了其他事件,以便如果有人要复制和粘贴搜索查询,则会调用该事件。 (这也需要 jQuery 1.83 或更高版本)。我从 jQuery Datatables 插件切换到 Kendo UI Grid 后创建了这段代码。我喜欢 Kendo,但真的很怀念 DataTables 提供的全局搜索文本框。我在我所有的剑道网格中都包含了这个代码。

     $("#category").on("keypress blur change", function () 
        var filter =  logic: "or", filters: [] ;
        $searchValue = $(this).val();
        if ($searchValue) 
            $.each($("#grid").data("kendoGrid").columns, function( key, column ) 
                if(column.filterable)  
                    filter.filters.push( field: column.field, operator:"contains", value:$searchValue);
                
            );
        
        $("#grid").data("kendoGrid").dataSource.query( filter: filter );
    );

【讨论】:

这正是我所做的,但现在我正在尝试过滤仅存在于数据源中的隐藏列,所以现在我可能不得不更改为另一种方法 伟大的工作 Mat.. 我也想从 Datatables 网格转移到 Kendo UI 网格,但是这个常见的搜索功能这些天一直在阻止我这样做。现在这可以帮助我完全过渡到 Kendo UI 网格。感谢您的工作【参考方案3】:

OnaBai 的答案不像 dataTables 那样工作,数据表将空格视为和跨字段。在小提琴中,如果您键入“chef 36”,它不会显示任何结果 dataTables 搜索将显示 productid 为 5 的行,因为它在一列中有厨师,而在另一列中有 36。 正确的代码如下所示http://jsfiddle.net/Naka3/38/。

    $("#category").keyup(function () 
    var selecteditem = $('#category').val();
    var kgrid = $("#grid").data("kendoGrid");
    selecteditem = selecteditem.toUpperCase();
    var selectedArray = selecteditem.split(" ");
    if (selecteditem) 
        //kgrid.dataSource.filter( field: "UserName", operator: "eq", value: selecteditem );
        var orfilter =  logic: "or", filters: [] ;
        var andfilter =  logic: "and", filters: [] ;
        $.each(selectedArray, function (i, v) 
            if (v.trim() == "") 
            
            else 
                $.each(selectedArray, function (i, v1) 
                    if (v1.trim() == "") 
                    
                    else 
                        orfilter.filters.push( field: "ProductName", operator: "contains", value:v1 ,
                                               field: "QuantityPerUnit", operator: "contains", value:v1);
                        andfilter.filters.push(orfilter);
                        orfilter =  logic: "or", filters: [] ;
                    

                );
            
        );
        kgrid.dataSource.filter(andfilter);
    
    else 
        kgrid.dataSource.filter();
    

);

【讨论】:

以上是关于在 Kendo UI Grid 中搜索所有列的主要内容,如果未能解决你的问题,请参考以下文章

与 Kendo-ui Grid 反应 - 错误的列标题

Kendo UI Grid 本地数据源列默认排序

Kendo Grid,隐藏了无用的额外列?

Kendo Grid:列标题复选框“选中所有”,在网格所有页面上选中复选框

如何从控制器更新 Kendo UI Grid 数据源?

MVC Grid 的 Kendo UI 如何隐藏 ID 列