Переконфигурируйте GridPanel с группировкой в ​​GroupingStore - PullRequest
1 голос
/ 03 марта 2011

У меня проблема с GridPanel, который использует GroupingView:

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 ]

4 голосов
/ 23 июня 2011

У меня были проблемы с хранилищем групп. Когда я изменил поле записи, и группировка была в том столбце, откуда я изменил поле, сетка автоматически не перегруппировала записи. Кроме того, при добавлении новой строки группировка была неправильной, добавленная запись не была добавлена ​​в правильную группу.

Я решил эту проблему, сохранив текущее поле groupBy в глобальном var, и каждый раз при обновлении или afteredit добавлял события из сетки, которую я разгруппировал, а затем использовал groupBy () с var, содержащим текущий столбец, в котором находилось хранилище. сгруппированы по.

Использование только grid.getView (). Refresh (); не сделал трюк.

Вопрос, конечно, в том, дружелюбен ли этот пользователь? Поскольку каждый раз, когда поле из строки изменяется и группировка устанавливается по столбцу этого поля, которое было изменено, запись перегруппируется, и у пользователя могут возникнуть проблемы с поиском строки, которую он изменял.

Лучшее решение: только unGroup, а затем используйте groupBy () с переменной var, в которой хранится текущий столбец groupBy, когда фокус на редактируемой записи теряется. ТАК о событии размытия.

1 голос
/ 04 марта 2011

Я думаю, что вы присоединяете слушателя к событию groupchange GroupingStore и записываете поле, которое было выбрано в качестве поля группировки.Затем при переконфигурировании вы указываете хранилище группировать по этому полю с помощью функции groupBy () или используете функцию ungroup () для удаления группировки.Затем вызовите метод view () сетки ().

Обратите внимание, что я не проверял это, так что это может быть полная чушь!: -)

...