【问题标题】:Kendo DataSource Filtering with multiple conditions具有多个条件的 Kendo 数据源过滤
【发布时间】:2012-12-21 15:05:04
【问题描述】:

我想为具有多个条件的数据源构建过滤器。我发现这个帖子 (HERE) 那里的人几乎有同样的问题,但我想在我的两个操作之间做一个 OR 而不是 AND。

目前有我的代码:

        var filter = { logic: "OR", filters: [] };

        var filterProduct = { logic: "AND", filters: [] };
        var supplierValue = dropdownSupplier.value();
        if (supplierValue != "00000000-0000-0000-0000-000000000000") {
            filterProduct.filters.push({ field: "SupplierId", operator: "eq", value: supplierValue });
        }

        var categoryValue = dropdownCategory.value();
        if (categoryValue != "00000000-0000-0000-0000-000000000000") {
            filterProduct.filters.push({ field: "CategoryId", operator: "eq", value: categoryValue });
        }

        var typeValue = dropdownType.value();
        if (typeValue != "00000000-0000-0000-0000-000000000000") {
            filterProduct.filters.push({ field: "TypeId", operator: "eq", value: typeValue });
        }


        var filterSelect = { logic: "OR", filters: [] };
        filterSelect.filters.push({ field: "Id", operator: "eq", value: "00000000-0000-0000-0000-000000000000" });

        filter.filters.push(filterProduct);
        filter.filters.push(filterSelect);

        dropdownProduct.dataSource.query({ filter: filter });

事实上我想要做的是:(filterProduct) OR (filterSelect) 但如果我没有在变量过滤器中使用“逻辑”,过滤器将是一个“AND”。

非常感谢

编辑:有一个 jsFiddle 接近我想要做的,但使用“AND”:Example 在这个例子中,过滤器是: [ {[ Freight = 11.61 OR Freight = 51.30 ]} AND {[ City startswith "Charleroi" ]} ]

但我想要一些类似的东西: [ {[ Freight = 11.61 OR Freight = 51.30 ]} OR {[ City startswith "Charleroi" ]} ]

【问题讨论】:

  • 我终于明白了,我会在 8 小时内把我的代码放在那里,我将能够... 但是关键字 AND 和 OR 需要小写,我不需要使用变量过滤器选择

标签: datasource kendo-ui


【解决方案1】:

最终代码可以正常工作:

关键字AND和OR需要小写,我不需要使用变量filterSelect

    var filter = { logic: "or", filters: [] };
    var filterProduct = { logic: "and", filters: [] };
    var supplierValue = dropdownSupplier.value();
    if (supplierValue != "00000000-0000-0000-0000-000000000000") {
        filterProduct.filters.push({ field: "SupplierId", operator: "eq", value: supplierValue });
    }
    var categoryValue = dropdownCategory.value();
    if (categoryValue != "00000000-0000-0000-0000-000000000000") {
        filterProduct.filters.push({ field: "CategoryId", operator: "eq", value: categoryValue });
    }
    var typeValue = dropdownType.value();
    if (typeValue != "00000000-0000-0000-0000-000000000000") {
        filterProduct.filters.push({ field: "TypeId", operator: "eq", value: typeValue });
    }
    if (filterProduct.filters.length > 0) {
        filter.filters.push(filterProduct);
    }
    filter.filters.push({ field: "Id", operator: "eq", value: "00000000-0000-0000-0000-000000000000" });
    dropdownProduct.dataSource.query({ filter: filter });

【讨论】:

    【解决方案2】:

    感谢论坛,您的示例帮助了我。对于其他试图解读 Kendo UI 的人(因为有多种未记录的做事方式),我已经包含了我的示例,以在两个不同的字段上设置过滤器,并且一个字段具有复合 OR 过滤器:

    var initialFilter = { logic: "or", filters: [] };
    var filterStatus = [
        { field: "impStatus", operator: "neq", value: "Complete" }
        ];
    var filterDeveloper = { logic: "or", filters: [
          { field: "developer", operator: "eq", value: "Unassigned" }
        ] };
    
    filterDeveloper.filters.push( { field: "developer", operator: "eq", value: "Bob" } );
    
    initialFilter.filters.push( filterStatus );
    initialFilter.filters.push( filterDeveloper );
    
    dataSource.filter( initialFilter );
    

    【讨论】:

    • 这非常有用,我试图让我的网格做这样的事情 (ParentTrackingID = NULL) 和 (TargetFlight startsWith "Px" 或 TargetFlight startsWith "Sx" 或 TargetFlight = NULL) 和 (OrganizationStatus eq "Approved" OR OrganizationStatus = "Updated") 和 Ideas,初始过滤器是否必须具有逻辑?
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2023-01-07
    • 2019-11-20
    • 2013-01-18
    相关资源
    最近更新 更多