web-dev-qa-db-fra.com

comment faites-vous une boucle à travers toutes les lignes dans la grille d'interface utilisateur de kendo avec filtre

voici mon code. cela fonctionne, si vous voulez parcourir toutes les lignes. maintenant, QA m'a dit que je devais le faire pour supporter le filtre. ainsi, lorsque l'utilisateur utilise un filtre, seul un sous-ensemble des lignes s'affiche sur la grille. Je dois parcourir uniquement ces lignes.

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

J'ai essayé.

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

et

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

ne pouvait pas le faire fonctionner.

22
qinking126

Pour référence future et pour ceux qui sont intéressés, j'ai trouvé la solution sur:

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

Cela fonctionne en obtenant d'abord la source de données de la grille, en obtenant le filtre et les données, en créant une nouvelle requête avec les données et en lui appliquant le filtre. Bien que cela aboutisse à l'obtention des résultats du filtre, il présente l'inconvénient distinct de traiter l'opération de filtrage deux fois.

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>')
    });
}
23
qinking126

Merci beaucoup!!! Avec cette aide, je l'ai fait maintenant ...

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

Alors maintenant, je peux obtenir mes données filtrées très facilement !!! Impressionnant!!!

Exemple:

var dataFiltered = $("#MyGrid").data("kendoGrid").dataSource.dataFiltered();
5
Rodolpho Brock