如何从GridX获取过滤行?

时间:2014-02-20 17:01:37

标签: dojo dojo.gridx

我正在使用Dojo GridX和许多模块,包括filter:

grid = new Grid({
    cacheClass : Cache,
    structure: structure,
    store: store,
    modules : [ Sort, ColumnResizer, Pagination, PaginationBar, CellWidget, GridEdit,
         Filter, FilterBar, QuickFilter, HiddenColumns, HScroller ],
    autoHeight : true, autoWidth: false,
    paginationBarSizes: [25, 50, 100],
    paginationBarPosition: 'top,bottom',
}, gridNode);
grid.filterBar.applyFilter({type: 'all', conditions: [
    {colId: 'type', condition: 'equal', type: 'Text', value: 'car'}
]})

我想访问与设置的过滤器匹配的项目。我在DOM资源管理器中浏览了grid属性,我在很多模块中找到了很多商店引用,但它们都包含所有项目。

是否有可能找出哪些项目在网格中可见,因为它们匹配过滤器,或者至少是当前页面上可见的那些?如果是这样,怎么做?

4 个答案:

答案 0 :(得分:1)

我的解决方案是:

try {
    var filterData = [];
    var ids = grid.model._exts.clientFilter._ids;
    for ( var i = 0; i < ids.length; ++i) {
        var id = ids[i];
        var item = grid.model.store.get(id);
        filterData.push(item);
    }
    var store = new MemoryStore({
        data : filterData
    });

} catch (error) {
    console.log("Filter is not set.");
}

答案 1 :(得分:0)

我能够使用gridX Exporter获取过滤的gridX数据行。将此Exporter模块添加到网格中。该模块确实导出过滤后的数据。然后,将CSV转换为Json。有许多CSV到Json转换javasripts那里。

this.navResult.grid.exporter.toCSV(args).then(this.showResult,this.onError,null)

答案 2 :(得分:0)

根据AirG的回答,我设计了以下解决方案。考虑到有两种情况,有或没有过滤器,如果你已经应用了某种排序,你必须知道行的顺序。至少这对我有用。

&#13;
&#13;
    var store = new Store({
        idProperty: "idPeople", data: [
            { idPeople: 1, name: 'John', score: 130, city: 'New York', birthday: '31/02/1980' },
            { idPeople: 2, name: 'Alice', score: 123, city: 'Wáshington', birthday: '07/12/1984' },
            { idPeople: 3, name: 'Lee', score: 149, city: 'Shanghai', birthday: '8/10/1986' },
            ...
        ]
    });
    
    gridx = new GridX({
        id: 'mygridx',
        cacheClass: Cache,
        store: store,
        ...
        modules: [
            ...
            {
                moduleClass: Dod,
                defaultShow: false,
                useAnimation: true,
                showExpando: true,
                detailProvider: gridXDetailProvider
            },
            ...
        ],
        ...
    }, 'gridNode');
    
    
    function gridXDetailProvider (grid, rowId, detailNode, rendered) {
        gridXGetDetailContent(grid, rowId, detailNode);
        rendered.callback();
        return rendered;
    }
    
    function gridXGetDetailContent(grid, rowId, detailNode) {
        if (grid.model._exts.clientFilter._ids === undefined || grid.model._exts.clientFilter._ids === 0) {
            // No filter, with or without sort
            detailNode.innerHTML = 'Hello ' + grid.row(grid.model._cache._priority.indexOf(rowId)).item().name + " with id " +
                                grid.row(grid.model._cache._priority.indexOf(rowId)).item().idPeople;
        } else {
            // With filter, with or without sort
            detailNode.innerHTML = 'Hello ' + grid.row(grid.model._exts.clientFilter._ids.indexOf(rowId)).item().name + " with id " +
                                grid.row(grid.model._exts.clientFilter._ids.indexOf(rowId)).item().idPeople;
        }
    }
&#13;
&#13;
&#13;

希望有所帮助, Santiago Horcajo

答案 3 :(得分:0)

function getFilteredData() {
    var filteredIds = grid.model._exts.clientFilter._ids;

    return grid.store.data.filter(function(item) {
        return filteredIds.indexOf(item.id) > -1;
    });
}