ExtJs Gridpanel 存储刷新

Posted

技术标签:

【中文标题】ExtJs Gridpanel 存储刷新【英文标题】:ExtJs Gridpanel store refresh 【发布时间】:2011-04-28 08:01:30 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

尝试刷新视图:

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

【讨论】:

这似乎不起作用。我 80% 的行都消失了【参考方案2】:

重新加载 ds 以刷新网格。

ds.reload();

【讨论】:

这行得通! getView().refresh() 好像没有效果。 刷新视图仍然适用于本地数据。如果您只删除服务器上的记录而不是本地记录,刷新将无济于事。【参考方案3】:
grid.store = store;
store.load( params:  start: 0, limit: 20 );
grid.getView().refresh();

【讨论】:

你确定你应该在异步加载后立即调用 grid.view.refresh() 吗?【参考方案4】:

我遇到了类似的问题。我需要做的就是在删除处理程序中输入store.load();。无需随后键入grid.getView().refresh();

除此之外,您还可以在删除处理程序中键入store.remove(record); - 这可确保已删除的记录不再显示在网格上。

【讨论】:

【参考方案5】:

试试这个grid.getView().refresh();

【讨论】:

他回答这个比接受的答案晚了 1 分钟,可能他们在同一时间打字,但他们的网速不同。【参考方案6】:

使用 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);
    

【讨论】:

【参考方案7】:
grid.getStore().reload(
  callback: function()
    grid.getView().refresh();
  
);

【讨论】:

【参考方案8】:

大傻与MMT解决方案的结合:

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

刷新网格存储

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

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

【讨论】:

以上是关于ExtJs Gridpanel 存储刷新的主要内容,如果未能解决你的问题,请参考以下文章

无法从gridpanel extjs4 MVC中的存储加载数据

EXTJS GridPanel 和 Column Data 默认值

来自数据库的 Extjs GridPanel 选择

无废话ExtJs 入门教程十七[列表:GridPanel]

在 Extjs 中删除 GridPanel 的 headertoolbar

ExtJs - 通过 Gridpanel 的索引获取行