2011-04-28 114 views
26

我從數據庫綁定ExtJs Gridpanel並在我的網格面板下添加「刪除」按鈕。通過使用刪除按鈕處理程序,我已經刪除了網格面板上的選定記錄。但是,刪除後,網格不會刷新(它將從數據庫中刪除,但由於不刷新而顯示在網格上)。ExtJs Gridpanel商店刷新

如何在刪除處理程序後刷新網格?

回答

38

嘗試刷新視圖:

Ext.getCmp('yourGridId').getView().refresh(); 
+1

這似乎不起作用。我的行中有80%剛剛消失 – 2014-10-01 14:43:38

12

重新加載ds以刷新網格。

ds.reload(); 
+0

This Works! getView()。refresh()似乎沒有效果。 – realjin 2014-09-21 14:24:55

+0

刷新視圖仍然適用於本地數據。如果您只刪除服務器上的記錄而非本地記錄,則刷新不會對您有所幫助。 – MarthyM 2016-07-07 07:54:38

3

試試這個grid.getView().refresh();

+1

他回答了這個比接受的答案遲了1分鐘,可能他們在同一時間打字,但他們有不同的網速。 – goldsky 2014-01-27 11:10:29

4

這是更好地使用store.remove比model.destroy。 該按鈕可以點擊處理程序是這樣的:

destroy: function(button) { 
    var grid = button.up('grid'); 
    var store = grid.getStore(); 
    var selected = grid.getSelectionModel().getSelection(); 

    if (selected && selected.length==1) { 
     store.remove(selected); 
    } 
} 
10
grid.store = store; 
store.load({ params: { start: 0, limit: 20} }); 
grid.getView().refresh(); 
+0

謝謝你沒有'store.load();' – 2012-06-07 17:45:28

+5

不工作你確定你應該在異步加載後立即調用grid.view.refresh()嗎? – Christoph 2013-06-21 07:14:42

5

我有一個類似的問題。我需要做的只是在刪除處理程序中鍵入store.load();。沒有必要隨後鍵入grid.getView().refresh();

除了所有這些,您還可以在刪除處理程序中鍵入store.remove(record); - 這確保已刪除的記錄不再顯示在網格上。

2

3.4中的另一種方法(不知道這是否合適的分機):假設每一行都有一個'刪除'按鈕,你可以使用這樣的刪除處理程序。

handler: function(grid, rowIndex, colIndex) { 
    var rec = grid.getStore().getAt(rowIndex); 
    var id = rec.get('id'); 
    // some DELETE/GET ajax callback here... 
    // pass in 'id' var or some key 
    // inside success 
    grid.getStore().removeAt(rowIndex); 
} 
3
grid.getStore().reload({ 
    callback: function(){ 
    grid.getView().refresh(); 
    } 
}); 
3

大傻的和MMT的解決方案組合:

Ext.getCmp('yourGridId').getView().ds.reload(); 
+0

這對我有用 – 2015-12-03 09:58:55

0

刷新網格商店

Ext.getCmp('GridId').getStore().reload();

這將刷新網格存儲和獲取新的數據。