ExtJs Gridpanel存储刷新

32

我正在从数据库绑定ExtJs Gridpanel,并在我的Gridpanel下方添加“删除”按钮。通过使用删除按钮处理程序,我已经删除了Gridpanel上选择的记录。但是,在删除后,网格没有刷新(虽然已经从数据库中删除,但由于没有刷新,仍然显示在网格中)。

如何在删除处理程序之后刷新网格?

10个回答

44

尝试刷新视图:

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

3
似乎这个不起作用。我的80%行数据都消失了。 - Oliver Watkins

13
重新加载数据集以刷新网格。
ds.reload();

这个可行!getView().refresh()似乎没有效果。 - realjin
刷新视图仍然可以使用本地数据。如果您只在服务器上删除记录而不是在本地删除,刷新将无法帮助您。 - MarthyM

11
grid.store = store;
store.load({ params: { start: 0, limit: 20} });
grid.getView().refresh();

6
你确定应该在异步加载完成后立即调用 grid.view.refresh() 吗? - Christoph

5
我曾经遇到过类似的问题,解决方法很简单,只需要在删除处理程序中键入store.load();即可。无需后续键入grid.getView().refresh();

另外,在删除处理程序中也可以键入store.remove(record),以确保已删除的记录不再显示在网格中。


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);
    }
}

4

Dasha和MMT解决方案的结合:

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

4
grid.getStore().reload({
  callback: function(){
    grid.getView().refresh();
  }
});

4
尝试使用以下代码:grid.getView().refresh();

1
他比被接受的答案晚了1分钟回答,可能是因为他们同时在打字,但是他们的网络速度不同。 - goldsky

2

在3.4中的另一种方法(不确定这是否是适当的Ext):您可以像这样拥有一个删除处理程序,假设每行都有一个“删除”按钮。

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);
}

2

刷新表格存储

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

这将重新加载表格存储并获取新数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接