Kendo grid 包含数组的剑道UI网格筛选器单元格

Kendo grid 包含数组的剑道UI网格筛选器单元格,kendo-grid,Kendo Grid,我想过滤剑道网格中包含数组的特定列 网格配置是 var resultsGrid = this.kendoGrid({ dataSource:{ data:[], pageSize:20 }, sortable: { mode: "multiple", allowUnsort: true }, filterable: {

我想过滤剑道网格中包含数组的特定列

网格配置是

 var resultsGrid = this.kendoGrid({
        dataSource:{
            data:[],
            pageSize:20
        },
        sortable: {
            mode: "multiple",
            allowUnsort: true
        },
        filterable: {
            extra: false,
            operators: {
                string: {
                    startswith: "Starts with",
                    eq: "Is equal to",
                    neq: "Is not equal to"
                }
            }
        },
        pageable: {
            pageSizes: true,
            buttonCount: 5
        },
        scrollable: false,
        columns: resultsColumns
    }).data("kendoGrid");
    return resultsGrid;
var resultsColumns = [
    {field: "keys", filterable: true, headerTemplate: function(){return Ec.translatedLabel("authorityEntryCode");}, template: '#for(var i = 0; i < keys.length; i++){# #=keys[i].name# =  #=keys[i].value# <br> #}#'},
    {field: "state", filterable: true, headerTemplate: function(){return Ec.translatedLabel("state");}},
    {field: "startDate", filterable: false, headerTemplate: function(){return Ec.translatedLabel("startDate");}},
    {command: initGridCommands(), headerTemplate: function(){return Ec.translatedLabel("actions");}}
];
列配置为

 var resultsGrid = this.kendoGrid({
        dataSource:{
            data:[],
            pageSize:20
        },
        sortable: {
            mode: "multiple",
            allowUnsort: true
        },
        filterable: {
            extra: false,
            operators: {
                string: {
                    startswith: "Starts with",
                    eq: "Is equal to",
                    neq: "Is not equal to"
                }
            }
        },
        pageable: {
            pageSizes: true,
            buttonCount: 5
        },
        scrollable: false,
        columns: resultsColumns
    }).data("kendoGrid");
    return resultsGrid;
var resultsColumns = [
    {field: "keys", filterable: true, headerTemplate: function(){return Ec.translatedLabel("authorityEntryCode");}, template: '#for(var i = 0; i < keys.length; i++){# #=keys[i].name# =  #=keys[i].value# <br> #}#'},
    {field: "state", filterable: true, headerTemplate: function(){return Ec.translatedLabel("state");}},
    {field: "startDate", filterable: false, headerTemplate: function(){return Ec.translatedLabel("startDate");}},
    {command: initGridCommands(), headerTemplate: function(){return Ec.translatedLabel("actions");}}
];
var resultsColumns=[
{field:“keys”,filterable:true,headerTemplate:function(){return Ec.translatedLabel(“authorityEntryCode”)},模板:'#for(var i=0;i#},
{field:“state”,filterable:true,headerTemplate:function(){return Ec.translatedLabel(“state”);},
{字段:“startDate”,filterable:false,headerTemplate:function(){return Ec.translatedLabel(“startDate”);},
{command:initGridCommands(),headerTemplate:function(){return Ec.translatedLabel(“操作”);}
];
我想用字段键过滤列

字段键是一个包含名称和值的对象数组,我希望使用值进行筛选

比如说

因此,当用户在屏幕截图中添加a1作为要过滤的第一行时


如果你对此有答案,请告诉我,这将对我有很大帮助,谢谢。

不幸的是,在我看来,这很难做到。一般过程将需要绑定到,使用您自己的表单删除默认筛选器弹出窗口的内容,然后手动对所需的特定字段执行筛选。我不知道对数组字段执行过滤的内置方法。仅覆盖所需内容的黑客版本可能是:

filterMenuInit: function(e) {
          if (e.field == "keys") {
            var filterButton = e.container.find("button[type=submit]");
            var clearButton = e.container.find("button[type=reset]");
            var dataSource = jQuery("#grid").data("kendoGrid").dataSource;

            //Get rid of default filter button...
            filterButton.remove();

            clearButton.parent().prepend("<button type='button' class='k-button k-primary'>Filter</button>");

            var filterText = e.container.find(".k-textbox");
            filterButton = e.container.find("button[type=button]");

            filterButton.click(function(e) {
               e.preventDefault();

               dataSource.filter([
                {
                    field: 'keys',
                    operator: function (items, filterValue) {
                      for(var i = 0; i < items.length; i++) {
                        if(items[i].value == filterText.val()) {
                          return true;
                        }
                      }
                      return false;
                    },
                    value: filterText.val()
                }
            ]);
            });

            clearButton.click(function() {
                dataSource.filter([]); //clear filters...
            });
          }
        },
filterMenuInit:function(e){
如果(如字段==“键”){
var filterButton=e.container.find(“按钮[type=submit]”);
var clearButton=e.container.find(“按钮[type=reset]”);
var dataSource=jQuery(“网格”).data(“kendoGrid”).dataSource;
//摆脱默认的过滤器按钮。。。
filterButton.remove();
clearButton.parent().prepend(“过滤器”);
var filterText=e.container.find(“.k-textbox”);
filterButton=e.container.find(“button[type=button]”);
过滤器按钮。单击(函数(e){
e、 预防默认值();
dataSource.filter([
{
字段:'键',
操作员:函数(项、过滤器值){
对于(变量i=0;i

这段代码既快又脏,因此我鼓励您阅读有关的文档,并提出一个更干净的解决方案

非常感谢,你的解决方案对我帮助很大。我只是对filter操作符做了一些修改,以理解我需要的“contains”和“eq”操作。我也有一个问题,当我点击过滤器按钮,下拉菜单失去了它的价值,所以我做了一些修改。包含修改的代码段示例