【问题标题】:Kendo grid filter on boolean values基于布尔值的剑道网格过滤器
【发布时间】:2015-08-12 13:38:06
【问题描述】:

我有一个剑道网格,我已经向其中添加了一个自定义过滤器字段。我遇到的问题是我的过滤器不会过滤EEFinalize 列。它可以很好地过滤任何包含实际单词的列,但如果它是布尔真/假值,则不会过滤。

这是我的搜索脚本

$(document).ready(function () {
        $("#FieldFilter").keyup(function () {

            var value = $("#FieldFilter").val();
            var grid = $("#grid").data("kendoGrid");

            if (value) {
                grid.dataSource.filter({
                    login: "or",
                    filters: [
                        { field: "ProfileName", operator: "contains", value: value },
                        { field: "EEFinalize", operator: "contains", value: value }
                    ]
                })
            } else {
                grid.dataSource.filter({});
            }
        });
    });

我还使用 clientTemplate 将 true/false 的值转换为 yes/no。

columns.Bound(obcs => obcs.EEFinalize).ClientTemplate("#= EEFinalize ? 'Yes'
 : 'No' #").Title(FieldTranslation.GetLabel("EEFinalize", GlobalVariables.LanguageID));

我假设运算符可能不正确,但无论我尝试什么,它似乎都没有过滤任何内容。它在列上运行过滤器,但不返回任何值。列中的所有值都是“否”,因此它应该显示所有内容。在这种情况下,它会将其过滤掉。

如果我选择网格过滤器图标,它会给我“是真的”和“不是真的”选项

【问题讨论】:

    标签: javascript jquery html asp.net-mvc kendo-grid


    【解决方案1】:

    这里有几处问题,没有看到您的专栏或模型,我无法确定。

    • 您的 logic 属性拼写错误。
    • 如果您的 EEFinalize 字段设置为布尔值,则该值不能为“否”,它将是 truefalse
    • 用于过滤的运算符在布尔字段上应该是“等于”而不是“包含”

    【讨论】:

      【解决方案2】:

      首先,我假设您在架构模型中将“EFFinalize”字段声明为“布尔值”,否则它将不起作用。您的代码应如下所示:

      $(document).ready(function () { $("#FieldFilter").keyup(function () {

              var value = $("#FieldFilter").val();
              var grid = $("#grid").data("kendoGrid");
      
              if (value) {
                  grid.dataSource.filter({
                      logic: "or",
                      filters: [
                          { field: "ProfileName", operator: "contains", value: value },
                          { field: "EEFinalize", operator: "eq", value: value }
                      ]
                  })
              } 
             // don't do anything if 'value' does not exist
          });
      });
      

      【讨论】:

        【解决方案3】:

        我能够成功实现布尔过滤的唯一方法是在数据源上使用解析函数并在所需列上显式设置真或假值。

        parse: function(data) {
            if( undefined !== data.resources ) {
                for(var i=0; i < data.resources.length; i++ ) {
                    if( data.resources[i]["IsChecked"] === "1" ) {
                        data.resources[i]["IsChecked"] = true;
                    } else {
                        data.resources[i]["IsChecked"] = false;
                    }
                }
            }
            return data;
        },
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          相关资源
          最近更新 更多