Как добавить итоговую строку в нижний колонтитул сетки в extjs

Я хочу добавить общую строку в нижний колонтитул сетки. У меня есть общая строка, в которой запись доступна в магазине. В сетке пользователь выбирает порядок убывания, итоговая строка отображается как первая строка. Может ли кто-нибудь сказать мне, как этого избежать?

Я объясню свою полную проблему:

например, у меня есть представление сетки, такое как Target Target1 Target2, получаемое из веб-сервиса

 Month Target  Target1  Target2   Target(2-1)  Target%
  jan    500     1000    1001        1           0.99
  feb    600     2000    2001        1           0.99

  **total  1100     3000    3002        2          2*3002/100** need to calculate total% like this   

Я вычисляю общее значение Target(2-1) Target% в магазине и привязываю магазин к сетке. Так что меняется только итоговая колонка. В сетке пользователь выбирает порядок убывания, также меняется итоговая строка. Может ли кто-нибудь сказать мне, как этого избежать?

Спасибо


person mohan    schedule 14.05.2013    source источник


Ответы (1)


Вы должны использовать функцию сводки по сетке вместо обычной строки. Вот скрипт, который демонстрирует использование в вашем примере и с пользовательской функцией summaryType, которая реализует расчет для вашего Target% Всего.

Это лучший метод, чем делать итоговый расчет в виде записи в магазине, вы не будете возиться с сортировкой и фильтрацией.

Посмотрите здесь документацию и живой пример. По сути, вам нужно добавить функцию в сетку, например:

Ext.create('Ext.grid.Panel', {
    ...
    features: [{
        ftype: 'summary'
    }],
    ...

И добавьте конфиг summaryType в нужные вам столбцы, например:

columns: [{
    dataIndex: 'name',
    text: 'Name',
    summaryType: 'sum',
...

А вот так выглядит пользовательский summaryType:

dataIndex: 'targetPercent',
text: 'Target%',
summaryType: function(records){
    var totals = records.reduce(function(sums, record){
        return [sums[0] + record.data.target2, 
                sums[1] + record.data.targetDiff];
    }, [0,0]);

    return (totals[0] * totals[1]) / 100;
} 
person Amit Aviv    schedule 14.05.2013
comment
спасибо за ответ, все значения поступают из хранилища, я назначаю поле столбцу {текст: 'имя', dataIndex: 'имя', flex: 1}, как это я делаю для общей строки. В общей строке у меня есть другой расчет для каждый столбец. - person mohan; 15.05.2013
comment
Функция сводки позволяет выполнять различные вычисления для каждого столбца в соответствии с используемым вами типом сводки и, при необходимости, выполнять более сложные вычисления. Если вы опубликуете jsfiddle, я смогу показать вам - person Amit Aviv; 15.05.2013
comment
ты понял мою проблему - person mohan; 15.05.2013
comment
Да, я по-прежнему думаю, что лучший способ решить эту проблему — использовать функцию сводки, просто сейчас у меня нет времени, чтобы показать вам пример того, как написать собственный тип сводки, надеюсь, я вернусь к этому позже сегодня. - person Amit Aviv; 15.05.2013
comment
спасибо за вашу помощь, амит. Это очень полезно из-за еще одного сомнения, что они устанавливают данные статически. Я устанавливаю значение для цели, цели1, цели2, чтобы заполнить сетку, используя свойство столбцов {text: 'Target', dataIndex: 'target' ,flex: 1 }, vale берутся из конфигурации столбца - person mohan; 15.05.2013
comment
он дает летний ряд ниже, мне нужно, чтобы он был сверху, затем покажите его данные - person Poonam Bhatt; 24.02.2014
comment
Если у вас есть собственный рендерер и ваш summaryType несовместим с ним, не забудьте определить summaryRenderer. Если вы этого не сделаете, для сводки будет использоваться средство визуализации столбцов, что может привести к неожиданным результатам. - person remo; 28.10.2014