【问题标题】:Filtering Kendo Grid Array Column过滤剑道网格阵列列
【发布时间】:2018-09-28 18:12:19
【问题描述】:

我有一个剑道网格,我用它来显示一个像这样的打字稿结构。

{ companyId: string, name: string, inceptionDate: Date, tags: string[] }

我希望能够过滤标签列,但我不确定这应该如何实际工作。我可以很容易地过滤名称列,无论是使用内置的网格过滤功能还是通过代码:

baseFilter.filters.push({ field: "name", operator: "contains", value: "myValue" });

但我没有看到针对数组对象执行此操作的方法。我希望能够从网格过滤器选项中的列表中选择一个标签,但如果这不可能,我会很乐意使用多选并手动设置过滤器。

这是内置的还是相对容易(甚至不是非常难)实现的东西?

【问题讨论】:

    标签: kendo-ui kendo-grid


    【解决方案1】:

    只要你在做客户端过滤,你就可以使用operator字段的函数。

    一个简单的例子(在 js 中):

    baseFilter.filters.push({
        field: "tags",
        operator: function (tags, value) {
            for (var i = 0; i < tags.length; i++) {
                var tag = tags[i];
                if (tag === value)
                    return true;
            }
    
            return false;
        }});
    

    【讨论】:

      【解决方案2】:

      TerminalSamurai 的回答对我有用!

      这是我的完整代码(检查是否已经存在过滤器)

      var grid = $("#GridListeModelesDocumentPatient_@Model.PatientId").data("kendoGrid");
      
              if (grid != null) {
      
                  var filterHandler = grid.dataSource.filter();
      
                  if (dataItem.Nom == "Tous") {
                      if (filterHandler != null) {
                          var existingFilters = filterHandler.filters;
      
                          for (var i = existingFilters.length - 1; i >= 0; i--) {
                              if (existingFilters[i].field == "ModelesMotifs") {
                                  existingFilters.splice(i, 1);
                              }
                          }
                          grid.dataSource.filter(existingFilters);
      
                      } else {
                          grid.dataSource.filter({});
                      }
                  } else {
                      if (filterHandler != null) {
                          var existingFilters = filterHandler.filters;
                          for (var i = existingFilters.length - 1; i >= 0; i--) {
                              if (existingFilters[i].field == "ModelesMotifs") {
                                  existingFilters.splice(i, 1);
                              }
                          }
                          var new_filter = {
                              field: "ModelesMotifs",
                              operator: function (modelesMotifs, value) {
                                  for (var i = 0; i < modelesMotifs.length; i++) {
                                      var modeleMotif = modelesMotifs[i];
                                      if (modeleMotif.MotifId === value)
                                          return true;
                                  }
      
                                  return false;
                              },
                              value: dataItem.MotifId
                          };
                          existingFilters.push(new_filter);
                          grid.dataSource.filter(existingFilters);
                      } else {
                          grid.dataSource.filter({
                              field: "ModelesMotifs",
                              operator: function (modelesMotifs, value) {
                                  for (var i = 0; i < modelesMotifs.length; i++) {
                                      var modeleMotif = modelesMotifs[i];
                                      if (modeleMotif.MotifId === value)
                                          return true;
                                  }
      
                                  return false;
                              },
                              value: dataItem.MotifId
                          });
                      }
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多