具有多个值的剑道 UI 网格筛选列

  • 本文关键字:UI 网格 筛选 kendo-grid
  • 更新时间 :
  • 英文 :


我一直在使用过滤器在我的KendoUI网格上成功搜索。但是,一个新应用程序有一些多值字段,我的过滤不起作用 - 它实际上似乎永远旋转。

多值字段的示例:

field   : "rspPersons",
title   : "Responsible Persons",
type    : "Text",
template: "# var t=rspPersons.join(', ');data.tagsString=t; # #=t #"

我的过滤器示例:

                        orfilter.filters.push( {
                            field : "chgDescription",
                            operator : "contains",
                            value : v1
                        },
                        orfilter.filters.push( {
                            field : "rspPersons",
                            operator : "contains",
                            value : v1
                        } 

第二个过滤器将使整个搜索崩溃。如果我把它拿出来,那么搜索/过滤器就可以了。

那么如何筛选/搜索多值字段呢?

您需要将多个筛选条件推送到筛选器数组中,并将其分配给 网格的数据源。这是我的做法。

function onChange() {
    var filter = { logic: "or", filters: [] };
    //  values is an array containing values to be searched
    var values = this.value();
    $.each(values, function (i, v) {
        filter.filters.push({ field: "column_name", operator: "eq", value: v 
       });
    });
    var dataSource = $("#searchgrid").data("kendoGrid").dataSource;
    dataSource.filter(filter);
}

应设置类似于以下内容的逻辑选项。

                filter({
                        logic: "or",
                        filters: [{
                            field: "LastName",
                            operator: "contains",
                            value: value
                        },
                        {
                            field: "FirstName",
                            operator: "contains",
                            value: value
                        }]
                    })

我创建了一个单独的搜索文本框,然后像这样完成脚本,它对我有用。

$("#search").keyup(function () {
        var selecteditem = $('#search').val();
        var kgrid = $("#gridName").data("kendoGrid");
        selecteditem = selecteditem.toUpperCase();
        var selectedArray = selecteditem.split(" ");
        if (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: "GridColumnFields", operator: "contains", value: v1 },
                                                    { field: "LastName", operator: "contains", value: v1 },
                                                    { field: "FirstName", operator: "contains", value: v1 },
                                                     { field: "GridColumnFields", operator: "contains", value: v1 },
                                                    { field: "GridColumnFields", operator: "contains", value: v1 }
                                                    );
                            andfilter.filters.push(orfilter);
                            orfilter = { logic: "or", filters: [] };
                        }
                    });
                }
            });
            kgrid.dataSource.filter(andfilter);
        }
        else {
            kgrid.dataSource.filter({});
        }
    });

您可以在搜索筛选器中定义所需的添加列

您可以在 HTML 中创建文本框

 <input type="text" id="search" name="search" />

最新更新