2011-03-04 66 views
8

假設我知道哪個行索引的目標(與this.rowToBeDeleted有一個值爲2,說),我怎麼能隱藏這一行只從網格,而不是商店(我有一個商店的標誌,這表示在我的PHP web服務代碼中稍後應該從db中刪除哪些行)。如何隱藏ExtJS GridPanel中的行?

回答

14

您可以使用store.filter()方法之一,也可以隱藏行元素。

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

我認爲這是更好的,雖然只刪除從商店的記錄,並讓店,因爲要刪除的記錄,而不只是隱藏它更新視圖。對於批處理模式下的商店(默認值:batch:true,restful:false),它會記住您已刪除哪些行,並且在您致電store.save()之前不會向服務器發出請求。

1

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

在您的記錄中設置一個「隱藏」屬性,並篩選隱藏設置爲true的所有記錄。這樣他們仍然會出現在商店中,但在網格中不可見。

4

我建議使用store.FilterBy()和傳遞函數測試值在rowToBedeleted值:

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

我寫了一篇關於gridfiltering前一陣子一個基本的博文,你可以在這裏閱讀:http://aboutfrontend.com/extjs/extjs-grid-filter/

+0

謝謝,不錯博客文章 – 2011-06-11 21:08:11

6

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

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

隱藏的行指定索引處,並

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

顯示它(其中「這」是網格)。

CSS類hidden被定義爲

.hidden, 
{ 
    display: none; 
} 

這是特有scenarious有用的store.filterBy()是不合適的。

+0

謝謝,這個幫了很多。過濾器取消選擇被過濾掉的功能,但這不是。 – 2017-10-18 09:18:14

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} 

這將隱藏在網格行,而不從商店移除或過濾。