2014-02-15 5 views
0

У меня есть сетка, в которой есть магазин платежей. Модель оплаты, которую использует магазин, имеет поле, которое является датой.Группировка по месяцам на сетке extjs

Я уже реализована группировка по дате, но это дает мне группу записей на каждый день, как это ...

enter image description here

То, что я хочу сделать, это есть группа для каждого месяц, а не каждый день.

Любые идеи о том, как это сделать?

+0

Какую версию Ext JS вы используете? –

+0

Я использую ExtJS 4.2 – lascort

ответ

0

Хорошо, неважно. Я только что нашел способ сделать это. Я создал поле, использующее convert, чтобы найти месяц платежа и использовал это поле в качестве поля группировки.

Я оставлю это опубликовано на случай, если кому-нибудь это понадобится.

Это модель оплаты ...

Ext.define('Ext.model.Payment',{ 
    extend: 'Ext.data.Model', 

    requires: [ 
     'Ext.data.Field' 
    ], 

    fields: [ 
     { 
      name: 'n_id_payment', 
      type:'integer' 
     },{ 
      name: 'n_amount', 
      type:'integer' 
     }....., 
     ..... Several other fields ..... 
     },{ 
      name:'payment_month', 
      type:'date', 
      convert:function(model, record){ 
       var today = new Date(record.data.dt_date); 
       var dd = today.getDate(); 
       var mm = today.getMonth(); 

       var month=new Array(); 
       month[0]="Enero"; 
       month[1]="Febrero"; 
       month[2]="Marzo"; 
       month[3]="Abril"; 
       month[4]="Mayo"; 
       month[5]="Junio"; 
       month[6]="Julio"; 
       month[7]="Agosto"; 
       month[8]="Septiembre"; 
       month[9]="Octubre"; 
       month[10]="Noviembre"; 
       month[11]="Diciembre"; 
       return month[mm]; 

      } 

     } 
    ] 
}) 

И это оплата магазин ...

Ext.define('Ext.store.PaymentsStore', { 
    extend: 'Ext.data.Store', 
    requires: [ 
     'Ext.model.Payment', 
     'Ext.data.proxy.Memory' 
    ], 

    constructor: function(cfg) { 
     var me = this; 
     cfg = cfg || {}; 
     me.callParent([Ext.apply({ 
      autoLoad: false, 
      async:false, 
      groupField:'payment_month', 
      model: 'Ext.model.Payment', 
      method:'POST', 
      proxy: { 
       isSynchronous:true, 
       type: 'ajax', 
       url: 'http://localhost/index.php/TblPayment/fetch', 
       reader:{ 
        type :'json', 
        method:'POST' 
       } 
      } 
     }, cfg)]); 
    } 
}); 

Это groupingFeature конфигурации ...

var groupingFeature = Ext.create('Ext.grid.feature.Grouping', { 
      groupHeaderTpl:'{name}' 
     }); 

Сетка также должна иметь это свойство features: [groupingFeature] И в случае, если вы застряли с ошибкой с группировкой, что-то о getRowStyleTableEl, являющемся нулевым ... Существует обходное решение для этой проблемы ...

Ext.override(Ext.view.Table, { 
    /* 
    Temporary fix for bug in ExtJS 4.2.1. See: sencha.com/forum/showthread.php?264657-Exception-When-Selecting-First-Grid-Row 
    */ 
    getRowStyleTableElOriginal: Ext.view.Table.prototype.getRowStyleTableEl, 
    getRowStyleTableEl: function() { 
    var el = this.getRowStyleTableElOriginal.apply(this, arguments); 
    if (!el) { 
     el = { 
     addCls: Ext.emptyFn, 
     removeCls: Ext.emptyFn, 
     tagName: {} 
     } 
    } 
    return el; 
    } 
}); 
+0

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

+1

Ответ объясняет гораздо больше, чем вопрос, о котором идет речь, и довольно долго из-за этого. Но в любом случае, не стесняйтесь редактировать его. – lascort

Смежные вопросы