2011-03-03 57 views
1

分组我有一个使用GroupingView一个GridPanel中的一个问题:重新配置的GridPanel与GroupingStore

var grid1 = new Ext.grid.GridPanel({ 
    store: new Ext.data.GroupingStore({ 
     fields: [ ] 
    }), 
    cm: new Ext.grid.ColumnModel([ ]), 
    selModel: new Ext.grid.RowSelectionModel({ singleSelect: false }), 
    view: new Ext.grid.GroupingView({ 
     groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "' + BPS.Resource.items + '" : "' + BPS.Resource.item + '"]})' 
    }) 
}); 

我我呼吁重新配置的情况下,设置一个新的商店和columnmodel。这家商店是一个GroupingStore我设置groupField我想用什么:

// define the store 
var store1 = new Ext.data.GroupingStore({ 
    proxy: new Ext.data.HttpProxy({ 
     url: listConfig.dataURL + '?sort=' + listConfig.defaultSortField + '&dir=' + listConfig.defaultSortDirection, 
     method: 'POST' 
    }), 
    autoLoad: false, 
    remoteSort: true, 
    remoteGroup: true, 
    groupOnSort: false, 
    groupField: listConfig.groupingColumn, 
    sortInfo: { 
     field: listConfig.defaultSortField, 
     direction: listConfig.defaultSortDirection 
    }, 
    paramNames: { 
     start: 'skip', 
     limit: 'take', 
     sort: 'sort', 
     dir: 'dir' 
    }, 
    reader: new Ext.data.JsonReader() 
}); 

// reconfigure the grid 
grid1.reconfigure(store1, new Ext.grid.ColumnModel(listConfig.columnDefinitions)); 

然而,这似乎工作它的第一次加载。它在一列上设置分组,或者根本没有分组,如果我没有配置它。但是,在用户关闭网格面板中的分组并且运行相同的代码以加载配置后,它不会将其更改为分组。

如何重新配置​​网格以使用或不使用分组?

回答

1

我认为您将侦听器附加到GroupingStore的groupchange事件并记录被选为分组字段的字段。然后,在重新配置时,您告诉商店使用groupBy()函数按该字段进行分组,或使用ungroup()函数删除分组。然后调用网格的视图refresh()方法。

请注意,我没有测试过,所以它可能是完整的垃圾! :-)

+0

赞赏这个想法,将在星期一尝试。 – 2011-03-04 17:19:20

+0

我无法让它与我的网格面板一起工作。虽然我不确定这是因为我有一些自定义加载逻辑,因为我使用GridPane分页滚动。我终于决定在刷新时创建一个全新的网格面板。 – 2011-03-07 17:13:22

4

我遇到了分组存储问题。当我修改记录的某个字段并且该分组位于该字段的修改字段时,网格不会自动重新组合记录。 另外,当添加新行时,分组不正确,添加的记录未添加到正确的组中。

我解决了这个问题,将当前groupBy字段保留在全局变量中,每次更新或重复处理,并从网格中添加事件,然后使用groupBy()与包含商店当前列的var被分组。

仅使用grid.getView()。refresh();没有做到这一点。

问题当然是,这是用户友好吗?因为每当一行中的字段被修改并且分组被设置在被修改的该字段的列上时,记录将被重新分组,并且用户可能在找到他正在修改的行时遇到问题。

更好的解决方案:只有在正在编辑的记录上的焦点丢失时,unGroup然后对存储当前groupBy列的var使用groupBy()。 SO模糊事件。