【问题标题】:Access entire row during Kendo DataSource custom filtering在 Kendo DataSource 自定义过滤期间访问整行
【发布时间】:2017-11-03 09:03:52
【问题描述】:

我正在尝试将自定义过滤器应用于 Kendo DataSource,以便它使用几列的计算进行过滤。 例如。过滤所有 field1 值大于 field2 值的 filterValue 百分比的项目。

dataSource.filter({
    field: 'field1',
    operator: function(value) {
        return value * 100 / valueFromField2 > filterValue;
    },
    value: filterValue
})

所以基本上我需要从操作符函数中访问其他行字段。

任何想法如何实现它?

【问题讨论】:

    标签: javascript angular kendo-grid kendo-datasource


    【解决方案1】:

    我不确定如何将其应用于您的案例,但如果您想访问 Kendo Grid 中的其他行,您可以:

    var grid = $("#grid").data("kendoGrid"); // The complete grid
    var row = grid.tbody.find("tr:eq(0)"); // Row index. Starts from 0. Excludes header row
    var data = grid.dataItem(row); // 'data' now has all fields for 'row'
    

    考虑一个示例网格:

    column1|column2
    ---------------
    ----1--|--One--
    ----2--|--Two--
    ---------------
    

    因此,对于eq(0)

    data.column1: 1
    data.column2: One
    

    更多信息:https://docs.telerik.com/kendo-ui/api/javascript/ui/grid#fields-tbody

    希望这会有所帮助:)

    【讨论】:

    • 感谢您的评论。恐怕我不能使用这个解决方案,因为我不知道过滤期间的行索引,并且在每个过滤方法调用上提取行应该会影响性能,尤其是对于大数据集。
    【解决方案2】:

    我相信您需要迭代每个字段值。

    类似:

    function (value) {
    
            var rowData = this.dataSource.view();
    
            for (var i = 0; i < rowData.length; i++) { // Iterate each row
                $.each(rowData[i].items, function (index, object) { // Iterate each object
                    var uid = object.uid;
    
                    // DO YOUR LOGIC HERE
    
                });
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 2022-01-21
      相关资源
      最近更新 更多