如何在ExtJS GridPanel中隐藏行?

时间:2011-03-04 18:44:00

标签: extjs

假设我知道要定位哪个行索引(例如,this.rowToBeDeleted的值为2),我怎样才能仅从网格中隐藏此行而不是商店(我有一个商店中的标志,表示我的PHP Web服务代码中应该从数据库中删除哪些行。)

5 个答案:

答案 0 :(得分:14)

您可以使用其中一种store.filter()方法,也可以隐藏行元素。

grid.getView().getRow(rowIndex).style.display = 'none';

我认为只是从商店中删除记录并让商店更新视图要好得多,因为您要删除记录而不是隐藏它。如果存储处于批处理模式(默认值:batch:true,restful:false),它将记住您已删除的行,并且在您调用store.save()之前不会向服务器发出请求。

答案 1 :(得分:6)

在ExtJS 4.1中,没有view.getRow(..)。相反,您可以使用:

this.view.addRowCls(index, 'hidden');

隐藏指定索引处的行,

this.view.removeRowCls(index, 'hidden');

显示它('这个'是网格)。

CSS类hidden定义为

.hidden,
{
    display: none;
}

这对于store.filterBy()不合适的特殊情况很有用。

答案 2 :(得分:5)

我建议使用store.FilterBy()并传递一个函数来测试rowToBedeleted中值的值:

store.filterBy(function(record) {
    return record.get("rowToBeDeleted") != 2;
});

我刚才写了一篇关于gridfiltering的基本博文,你可以在这里阅读:http://aboutfrontend.com/extjs/extjs-grid-filter/

答案 3 :(得分:1)

您可以使用store.filter()store.filterBy()方法。

在记录上设置“隐藏”属性,并过滤所有隐藏设置为true的记录。这样他们仍然会出现在商店中但在网格中不可见。

答案 4 :(得分:1)

在网格js文件中编写以下代码,将CSS应用于要隐藏的行。

<pre><code>
    Ext.define('MyGrid',{
    extend : 'Ext.grid.Panel',
    xtype : ''mygrid',
    viewConfig : {
       getRowClass : function(record,id){
          if(record.get('rowToBeDeleted') == 2){
             return 'hide-row';
          }
       }
    },
    .................
    .................
    });
</code></pre>

现在在custom.css文件中定义自定义CSS:

.hide-row{display:none}

这将隐藏网格中的行而不从商店中删除或过滤。