1

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

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

我可以做些什么来重新配置网格以使用或不使用分组?

4

2 回答 2

4

我遇到了 groupingstore 的问题。当我修改记录的字段并且分组位于我修改字段的那一列时,网格不会自动重新组合记录。此外,在添加新行时,分组不正确,添加的记录没有添加到正确的组中。

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

仅使用 grid.getView().refresh(); 没有成功。

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

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

于 2011-06-23T07:22:09.703 回答
1

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

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

于 2011-03-04T15:56:32.720 回答