如何使用过滤器遍历kendoUI网格中的所有行

时间:2012-10-22 18:39:19

标签: kendo-ui

这是我的代码。它可以工作,如果你想遍历所有行。现在,QA告诉我,我必须支持过滤器。因此,当用户使用过滤器时,只有行的子集将显示在网格上。我只需要遍历那些行。

    var entityGrid = $("#EntitesGrid").data("kendoGrid");       
    var data = entityGrid.dataSource.data();
    var totalNumber = data.length;

    for(var i = 0; i<totalNumber; i++) {
        var currentDataItem = data[i];
        VersionIdArray[i] = currentDataItem.VersionId;
    }

我试过了。

    var data = entityGrid.dataSource.data().fetch();

    var data = entityGrid.dataSource.data().filter();

无法让它发挥作用。

2 个答案:

答案 0 :(得分:23)

为了将来的参考和感兴趣的人,我找到了解决方案:

http://colinmackay.scot/2012/07/23/kendo-ui-paging-and-accessing-the-filtered-results-in-javascript/

  

首先获取网格的数据源,获取过滤器和数据,使用数据创建新查询并对其应用过滤器。虽然这确实导致获得过滤器的结果,但它确实具有处理过滤器操作两次的明显缺点。

function displayFilterResults() {
    // Gets the data source from the grid.
    var dataSource = $("#MyGrid").data("kendoGrid").dataSource;

    // Gets the filter from the dataSource
    var filters = dataSource.filter();

    // Gets the full set of data from the data source
    var allData = dataSource.data();

    // Applies the filter to the data
    var query = new kendo.data.Query(allData);
    var filteredData = query.filter(filters).data;

    // Output the results
    $('#FilterCount').html(filteredData.length);
    $('#TotalCount').html(allData.length);
    $('#FilterResults').html('');
    $.each(filteredData, function(index, item){
        $('#FilterResults').append('<li>'+item.Site+' : '+item.Visitors+'</li>')
    });
}

答案 1 :(得分:5)

非常感谢!!!有了这个帮助,我现在就这样做了......

kendo.data.DataSource.prototype.dataFiltered = function () {
    // Gets the filter from the dataSource
    var filters = this.filter();

    // Gets the full set of data from the data source
    var allData = this.data();

    // Applies the filter to the data
    var query = new kendo.data.Query(allData);

    // Returns the filtered data
    return query.filter(filters).data;
}

所以现在我可以轻松获取过滤后的数据!真棒!!!