使用GroupingStore进行分组重新配置GridPanel

时间:2011-03-03 10:38:01

标签: extjs gridpanel

我遇到使用GroupingView的GridPanel的问题:

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 + '"]})'
    })
});

我调用了重新配置的事件,它设置了一个新的商店和列模型。商店是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));

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

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

2 个答案:

答案 0 :(得分:4)

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

我通过将当前的groupBy字段保存在全局var中并且每次都在更新或afteredit并且从网格中添加了事件而解决了这个问题我已经解组,然后将groupBy()与包含存储所在的当前列的var一起使用分组。

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

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

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

答案 1 :(得分:1)

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

请注意,我没有对此进行测试,因此它可能是完全垃圾! : - )