Following is my code to show a grid panel with total cost summary. I want to show another summary row with average. So any help?
Ext.require(['Ext.data.*', 'Ext.grid.*']);
Ext.onReady(function() {
Ext.define('NewEstimate', {
extend: 'Ext.data.Model',
fields: ['description', 'cost'],
validations: [{
type: 'length',
field: 'description',
min: 3
}, {
type: 'int',
field: 'cost',
min: 1
}]
});
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
var store = Ext.create('Ext.data.Store', {
autoLoad: true,
autoSync: false,
model: 'NewEstimate',
proxy: {
type: 'rest',
url: 'app.php/users',
reader: {
type: 'json',
root: 'data'
},
writer: {
type: 'json'
}
},
listeners: {
write: function(store, operation){
var record = operation.records[0],
name = Ext.String.capitalize(operation.action),
verb;
if (name == 'Destroy') {
verb = 'Destroyed';
} else {
verb = name + 'd';
alert(name);
}
Ext.example.msg(name, Ext.String.format("{0} user: {1}", verb, record.getId()));
}
}
});
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1,
listeners: {
edit: function(){
grid.getView().refresh();
}
}
});
var data = [
{projectId: 100, taskId: 112, description: 'Integrate 2.0 Forms with 2.0 Layouts', cost: 150},
{projectId: 100, taskId: 113, description: 'Implement AnchorLayout', cost: 150},
{projectId: 100, taskId: 114, description: 'Add support for multiple types of anchors', cost: 150},
{projectId: 100, taskId: 115, description: 'Testing and debugging', cost: 0}
];
var gridPanel = new Ext.create('Ext.grid.Panel', {
width: 600,
height: Ext.getBody().getViewSize().height * 0.3,
renderTo: document.body,
plugins: [rowEditing],
features: [{
ftype: 'summary'
}
],
store: store,
columns: [{
dataIndex: 'description',
flex: 1,
text: 'Description',
summaryType: 'count',
field: {
xtype: 'textfield',
allowBlank: false
},
summaryRenderer: function(value){
return Ext.util.Format.leftPad('Estimate Total (EUR)');
}
}, {
dataIndex: 'cost',
width: 75,
text: 'Line Total',
field: {
xtype: 'numberfield',
allowBlank: false
},
summaryType: function(records){
var i = 0,
length = records.length,
total = 0,
record;
for (; i < length; ++i) {
record = records[i];
total = total + Number(record.get('cost'));
}
return total;
}
}],
dockedItems: [
{
xtype: 'toolbar',
items: [{
text: 'Add',
iconCls: 'icon-add',
handler: function(){
// empty record
store.insert(0, new NewEstimate());
rowEditing.startEdit(0, 0);
}
} , '-',
{
text: 'Delete',
iconCls: 'icon-delete',
handler: function(){
var selection = gridPanel.getView().getSelectionModel().getSelection()[0];
if (selection) {
store.remove(selection);
}
}
}]
}]
});
});
Thanks in advance