Kendo网格过滤布尔值

时间:2015-08-12 13:38:06

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

我有一个kendo网格,我已经添加了一个自定义过滤器字段。我遇到的问题是我的过滤器不会在EEFinalize列上过滤。它可以在任何具有实际单词的列上过滤,但如果它是布尔值true / false,则不会过滤。

这是我的搜索脚本

$(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));

我假设操作员可能不正确,但无论我尝试它,似乎都没有过滤任何东西。它在列上运行过滤器但不返回任何值。列中的所有值均为“no”,因此它应显示所有内容。在这种情况下,它会将其过滤为空。

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

3 个答案:

答案 0 :(得分:2)

这里有些不对劲而且看不到你的专栏或型号我无法确定。

  • 您的logic财产拼写错误。
  • 如果您的EEFinalize字段设置为布尔值,则值不能为" no",它将为truefalse
  • 过滤操作员应该是"等于"不是"包含"在布尔字段

答案 1 :(得分:0)

首先,我假设你宣布你的“强制性”'字段为' boolean'在您的架构模型中,否则它将无法工作。您的代码应如下所示:

$(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
    });
});

答案 2 :(得分:0)

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

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;
},