如何在extjs中的网格列标题中添加过滤器?

时间:2013-06-13 10:50:58

标签: extjs sencha-architect extjs4.2

我有一个网格,里面有很多记录。所以我想在每个列标题中添加过滤器以轻松过滤所需的数据。我已经看到了sencha文档中给出的例子。但是如何在Extjs 4.2版本中实现它。如何在其中使用UX类?有插件吗?

我非常感谢你。

请帮帮我。

阿南德

4 个答案:

答案 0 :(得分:3)

这是一个例子:

Ext.define('Webdesktop.view.admin.List', {
extend: 'Ext.grid.Panel',
alias: 'widget.admin_casoslist',
initComponent: function() {
    var me = this,
    filters = {
        ftype: 'filters',
        encode: false,
        local: true
    };

    Ext.apply(me, {
        title: 'gridTitle',
        store: List_CasSos_Store,

        filterable: true,
        features: [filters],
        closable: true, // fixme: need to set here, because has no effect in tabpanel defaults configuration
        autoScroll: true,
        columns: {
            items:[
            {
                text: 'header1',
                filter: {
                    type: 'string'
                },
                flex: 1,
                dataIndex: 'relation_patron_paraine'
            },{
                text:'header2',
                filter: {
                    type: 'list',
                    options: ['case4', 'case3', 'case2', 'case1']
                },
                hidden:true,
                flex: 1,
                dataIndex: 'etatsante'
            },{
                text:'header3',
                filter: {
                    type: 'numeric'
                },
                hidden:true,
                flex: 1,
                dataIndex: 'revenumnsuel'
            }
            ],
            defaults : {
                align: 'center'
            }
        }
    });
    me.callParent();
}

在控制器中:

uses: [
   'Webdesktop.view.admin.List',
    ...
   'Ext.ux.grid.FiltersFeature'
    ]

答案 1 :(得分:1)

您需要将其添加到网格配置中:

plugins: [{
  ptype: 'gridfilters'
}],

然后在每一栏中:

filter: {type: 'string', dataIndex: 'passengerFullName'},

请注意,过滤器依赖于存储,无论它是远程过滤器还是本地过滤器。

有关详细信息,请参阅此处:http://docs.sencha.com/extjs/6.0.2-classic/Ext.grid.filters.Filters.html

答案 2 :(得分:1)

要在grid的标头中使用过滤器,您需要声明过滤器数组,然后为网格提供范围。然后写

this.filters = new Ext.ux.grid.GridFilters({
            filters:this.filter
        }) ;

为此提供插件

this.plugins = [this.filters];

添加列写入的位置

gridEl.filter{
        type: 'list',
        dataIndex: "DATAINDEX",
        local : local,
        dataForFilter : data
    };

答案 3 :(得分:0)

捕获“列单击”列的一个解决方案是,获取要过滤的参数,并在函数中将此过滤器放在网格存储上。

列示例

{
    header      : "email",
    dataIndex   : 'email',
    listeners : {
        click: {
            element: 'el', //bind to the underlying el property on the panel
            fn: function(){ 
                storeGrid.filter("email", /\.com$/); // email
                            storeGrid.sort('myField', 'ASC');
            }
        }
    }
},

Sencha过滤器:filter store

Sencha排序:sort store data