ExtJs Grid: "Remove Selected Record" Toolbar Button
Ext.onReady(function () {
Ext.define('Ext.ux.DeleteButton', {
extend: 'Ext.button.Button',
alias: 'widget.delbutton',
text: 'Remove Selected Record',
handler: function () {
var grid = this.up('grid');
if (grid) {
var sm = grid.getSelectionModel();
var rs = sm.getSelection();
if (!rs.length) {
Ext.Msg.alert('Info', 'No Records Selected');
return;
}
Ext.Msg.confirm('Remove Record', 'Are you sure?', function (button) {
if (button == 'yes') {
grid.store.remove(rs[0]);
}
});
}
}
});
Ext.create('Ext.grid.Panel', {
title: 'Simpsons',
width: 500,
tbar: [{ xtype: 'delbutton'}],
store: {
fields: ['name', 'email', 'phone'],
data: [
{ 'name': 'Lisa', "email": "lisa@simpsons.com", "phone": "555-111-1224" },
{ 'name': 'Bart', "email": "bart@simpsons.com", "phone": "555-222-1234" },
{ 'name': 'Homer', "email": "home@simpsons.com", "phone": "555-222-1244" }
]
},
columns: [
{ header: 'Name', dataIndex: 'name' },
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone' }
],
renderTo: 'output'
});
});
How To Make Every Grid Able To Create It's Own Store Instance? - Part 2
Ext.onReady(function () {
Ext.define('App.MyStore', {
extend: 'Ext.data.Store',
fields: ['name', 'email', 'phone'],
data: [
{ 'name': 'Lisa', "email": "lisa@simpsons.com", "phone": "555-111-1224" },
{ 'name': 'Bart', "email": "bart@simpsons.com", "phone": "555-222-1234" },
{ 'name': 'Homer', "email": "home@simpsons.com", "phone": "555-222-1244" }
]
});
Ext.define('App.MyForm', {
extend: 'Ext.window.Window',
alias: 'widget.myform',
title: 'Simpsons',
width: 500,
layout: 'fit',
initComponent: function () {
var store = Ext.create('App.MyStore');
this.items = [{
xtype: 'grid',
store: store,
columns: [
{ header: 'Name', dataIndex: 'name' },
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone' }
]
}];
this.callParent(arguments);
}
});
Ext.widget('button', {
text: 'First Test Grid',
renderTo: 'output',
handler: function () {
Ext.widget('myform', {
title: 'First Test Grid',
border: false,
autoShow: true
});
}
});
Ext.widget('button', {
text: 'Second Test Grid',
renderTo: 'output',
handler: function () {
Ext.widget('myform', {
title: 'Second Test Grid',
border: false,
autoShow: true
});
}
});
});
How To Make Every Grid Able To Create It's Own Store Instance?
Ext.onReady(function () {
Ext.define('App.MyStore', {
extend: 'Ext.data.Store',
fields: ['name', 'email', 'phone'],
data: [
{ 'name': 'Lisa', "email": "lisa@simpsons.com", "phone": "555-111-1224" },
{ 'name': 'Bart', "email": "bart@simpsons.com", "phone": "555-222-1234" },
{ 'name': 'Homer', "email": "home@simpsons.com", "phone": "555-222-1244" }
]
});
Ext.define('App.MyGrid', {
extend: 'Ext.grid.Panel',
alias: 'widget.mygrid',
title: 'Simpsons',
width: 500,
initComponent: function () {
this.store = Ext.create('App.MyStore');
this.callParent(arguments);
},
columns: [
{ header: 'Name', dataIndex: 'name' },
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone' }
]
});
Ext.widget('mygrid', {
title: 'First Test Grid',
renderTo: 'output'
});
Ext.widget('mygrid', {
title: 'Second Test Grid',
margin: '5 0 0 0',
renderTo: 'output'
});
});
Hide/Show Grid Column Lines
Ext.onReady(function() {
Ext.create('Ext.grid.Panel', {
title:'Simpsons',
width: 500,
tbar: [
{
text:'Show Column Lines',
handler:function() {
this.up('grid').setColumnLines(true);
}
},
{
text:'Hide Column Lines',
handler:function() {
this.up('grid').setColumnLines(false);
}
}
],
store: {
fields: ['name','email','phone'],
data: [
{'name':'Lisa',"email":"lisa@simpsons.com","phone":"555-111-1224"},
{'name':'Bart',"email":"bart@simpsons.com","phone":"555-222-1234"},
{'name':'Homer',"email":"home@simpsons.com","phone":"555-222-1244"}
]
},
columns: [
{ header: 'Name', dataIndex: 'name'},
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone'}
],
renderTo:'output'
});
});
Hide/Show Grid's Body
Ext.onReady(function () {
Ext.create('Ext.grid.Panel', {
title: 'Simpsons',
width: 500,
bodyStyle: 'visibility: hidden;',
tbar: [
{
text: 'Show Body',
handler: function () {
this.up('grid').body.show();
}
},
{
text: 'Hide Body',
handler: function () {
this.up('grid').body.hide();
}
}
],
store: {
fields: ['name', 'email', 'phone'],
data: [
{ 'name': 'Lisa', "email": "lisa@simpsons.com", "phone": "555-111-1224" },
{ 'name': 'Bart', "email": "bart@simpsons.com", "phone": "555-222-1234" },
{ 'name': 'Homer', "email": "home@simpsons.com", "phone": "555-222-1244" }
]
},
columns: [
{ header: 'Name', dataIndex: 'name' },
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone' }
],
renderTo: 'output'
});
});
ExtJS 4 Readonly Checkbox Column
.x-grid-checkheader
{
background:url('/Content/images/icons/unchecked.gif')no-repeatcenter center;
}
.x-grid-checkheader-checked
{
background:url('/Content/images/icons/checked.gif')no-repeat center center;
}
.x-grid-checkheader
{
background:url('/Content/images/icons/unchecked.gif')no-repeatcenter center;
}
.x-grid-checkheader-checked
{
background:url('/Content/images/icons/checked.gif')no-repeat center center;
}
Ext.Loader.setConfig({
enabled:true,
paths: {
'Ext.ux':'/Scripts/ext/ext-4.0.7-gpl/ux'
}
});
Ext.require(['Ext.ux.CheckColumn']);
Ext.onReady(function() {
Ext.define('User', {
extend:'Ext.data.Model',
fields: [
{ name: 'id', type: 'int'},
{ name: 'name', type: 'string'},
{ name: 'active', type: 'boolean'}
]
});
Ext.create('Ext.grid.Panel', {
title:'Users',
width: 400,
store: Ext.create('Ext.data.Store', {
model:'User',
data: [
{ id: 1, name: 'name 1', active: false},
{ id: 2, name: 'name 2', active: true},
{ id: 3, name: 'name 3', active: true}
]
}),
columns: [
{ header: 'id', dataIndex: 'id'},
{ header: 'name', dataIndex: 'name', flex: 1 },
{ header: 'active', dataIndex: 'active', xtype: 'checkcolumn', processEvent: function() { returnfalse; } }
],
renderTo:'output'
});
});
Filter Window For Grid
Ext.onReady(function() {
Ext.define('App.store.Books', {
extend:'Ext.data.Store',
fields: ['id','title','author'],
data: [
{ id: 1, title: 'Learning Ext JS', author: 'Shea Frederick' },
{ id: 2, title: 'Ext JS Projects with Gears', author: 'Frank Zammetti' },
{ id: 3, title: 'Ext JS in Action', author: 'Jesus D. Garcia' },
{ id: 4, title: 'Java Precisely', author: 'Peter Sestoft' },
{ id: 5, title: 'Mastering C++', author: 'K. R. Venugopal' }
]
});
Ext.define('App.view.BooksList', {
extend:'Ext.grid.Panel',
alias:'widget.bookslist',
title:'Books List',
store:'Books',
initComponent:function() {
this.tbar = [
{
text:'Filter',
action:'filter',
iconCls:'filter-add'
}
];
this.columns = [
{ header: 'Id', dataIndex: 'id', width: 50 },
{ header: 'Title', dataIndex: 'title', flex: 1 },
{ header: 'Author', dataIndex: 'author'}
];
this.callParent(arguments);
}
});
Ext.define('App.view.BooksFilter', {
extend:'Ext.window.Window',
alias:'widget.booksfilter',
title:'Books Filter',
width: 350,
layout:'fit',
resizable:false,
closeAction:'hide',
modal:true,
items: [
{
xtype:'form',
layout:'anchor',
bodyStyle: {
background:'none',
padding:'10px',
border:'0'
},
defaults: {
xtype:'textfield',
anchor:'100%'
},
items: [
{
name:'title',
fieldLabel:'Title'
},
{
name:'author',
fieldLabel:'Author'
}
]
}
],
buttons: [
{
text:'OK',
action:'filter'
},
{
text:'Reset',
handler:function() { this.up('window').down('form').getForm().reset(); }
},
{
text:'Cancel',
handler:function() { this.up('window').close(); }
}
]
});
Ext.define('App.controller.Books', {
extend:'Ext.app.Controller',
stores: ['Books'],
views: ['BooksList','BooksFilter'],
refs: [
{
ref:'filterWindow',
xtype:'booksfilter',
selector:'booksfilter',
autoCreate:true
}
],
init:function() {
this.control({
'bookslist > toolbar > button[action=filter]': {
click:this.onFilter
},
'booksfilter button[action=filter]': {
click:this.doFilter
}
});
},
onFilter:function() {
varwin = this.getFilterWindow();
win.show();
},
doFilter:function() {
varwin = this.getFilterWindow();
varstore = this.getBooksStore();
varvalues = win.down('form').getValues();
varfilters = [];
for(varp invalues) {
varvalue = values[p];
if(value) {
filters.push({ property: p, value: value });
}
}
win.close();
if(filters.length) {
store.clearFilter(true);
store.filter(filters);
}else{
store.clearFilter();
}
}
});
Ext.application({
name:'App',
controllers: ['Books'],
launch:function() {
Ext.widget('bookslist', {
width: 400,
renderTo:'output'
});
}
});
});
.filter-add
{
background-image:url('/content/images/icons/filter-add.png');
}
Progress Bar Inside A Grid Cell
Ext.onReady(function() {
Ext.create('Ext.grid.Panel', {
title:'Simpsons',
width: 500,
height: 200,
store: Ext.create('Ext.data.Store', {
fields: ['name','email','phone','progress'],
data: [
{'name':'Lisa',"email":"lisa@simpsons.com","phone":"555-111-1224",'progress': 25 },
{'name':'Bart',"email":"bart@simpsons.com","phone":"555-222-1234",'progress': 50 },
{'name':'Homer',"email":"home@simpsons.com","phone":"555-222-1244",'progress': 75 },
{'name':'Marge',"email":"marge@simpsons.com","phone":"555-222-1254",'progress': 100 }
]
}),
columns: [
{ header: 'Name', dataIndex: 'name'},
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone'},
{
header:'Progress',
dataIndex:'progress',
width: 110,
renderer:function(v, m, r) {
varid = Ext.id();
Ext.defer(function() {
Ext.widget('progressbar', {
renderTo: id,
value: v / 100,
width: 100
});
}, 50);
returnExt.String.format('<div id="{0}"></div>', id);
}
}
],
renderTo:'output'
});
});
Ext.onReady(function() {
Ext.create('Ext.grid.Panel', {
title:'Simpsons',
width: 500,
height: 200,
store: Ext.create('Ext.data.Store', {
fields: ['name','email','phone','progress'],
data: [
{'name':'Lisa',"email":"lisa@simpsons.com","phone":"555-111-1224",'progress': 25 },
{'name':'Bart',"email":"bart@simpsons.com","phone":"555-222-1234",'progress': 50 },
{'name':'Homer',"email":"home@simpsons.com","phone":"555-222-1244",'progress': 75 },
{'name':'Marge',"email":"marge@simpsons.com","phone":"555-222-1254",'progress': 100 }
]
}),
columns: [
{ header: 'Name', dataIndex: 'name'},
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone'},
{
header:'Progress',
dataIndex:'progress',
width: 110,
renderer:function(v, m, r) {
varid = Ext.id();
Ext.defer(function() {
Ext.widget('progressbar', {
renderTo: id,
value: v / 100,
width: 100
});
}, 50);
returnExt.String.format('<div id="{0}"></div>', id);
}
}
],
renderTo:'output'
});
});
How To Change A Column Template On The Rendered Grid Column?
Js Code
Ext.onReady(function() {
Ext.define('Ext.grid.column.UpdatableTemplate', {
extend:'Ext.grid.column.Column',
alias:'widget.updatabletemplatecolumn',
requires: ['Ext.XTemplate'],
constructor:function(cfg) {
varme = this;
me.callParent(arguments);
me.tpl = (!Ext.isPrimitive(me.tpl) && me.tpl.compile) ? me.tpl : Ext.create('Ext.XTemplate', me.tpl);
me.renderer = function(value, p, record) {
vardata = Ext.apply({}, record.data, record.getAssociatedData());
returnme.tpl.apply(data);
};
},
setTemplate:function(tpl) {
this.tpl = Ext.create('Ext.XTemplate', tpl);
}
});
Ext.create('Ext.grid.Panel', {
title:'Simpsons',
width: 500,
height: 200,
store: {
fields: ['name','email','phone'],
data: [
{'name':'Lisa',"email":"lisa@simpsons.com","phone":"555-111-1224"},
{'name':'Bart',"email":"bart@simpsons.com","phone":"555-222-1234"},
{'name':'Homer',"email":"home@simpsons.com","phone":"555-222-1244"},
{'name':'Marge',"email":"marge@simpsons.com","phone":"555-222-1254"}
]
},
tbar: [
{
text:'First Template',
handler:function() {
this.up('grid').changeTemplate('name','<b>{name}</b> ({email})');
}
},
{
text:'Second Template',
handler:function() {
this.up('grid').changeTemplate('name','<b>{name}</b> ({phone})');
}
}
],
columns: [
{ header: 'Name', dataIndex: 'name', xtype: 'updatabletemplatecolumn', tpl: '{name}', flex: 1 }
],
changeTemplate:function(column, tpl) {
Ext.Array.each(this.columns,function(item) {
if(item.dataIndex == column) {
item.setTemplate(tpl);
returnfalse;
}
});
this.getView().refresh();
},
renderTo:'output'
});
});
How Add Dynamic Button In Grid Panel Column Using Renderer?
Js Code
Ext.onReady(function() {
Ext.create('Ext.grid.Panel', {
title:'Simpsons',
width: 500,
height: 200,
store: Ext.create('Ext.data.Store', {
fields: ['name','email','phone'],
data: [
{'name':'Lisa',"email":"lisa@simpsons.com","phone":"555-111-1224"},
{'name':'Bart',"email":"bart@simpsons.com","phone":"555-222-1234"},
{'name':'Homer',"email":"home@simpsons.com","phone":"555-222-1244"},
{'name':'Marge',"email":"marge@simpsons.com","phone":"555-222-1254"}
]
}),
columns: [
{ header: 'Name', dataIndex: 'name'},
{ header: 'Email', dataIndex: 'email', flex: 1 },
{ header: 'Phone', dataIndex: 'phone'},
{
header:'Buttons',
renderer:function(v, m, r) {
varid = Ext.id();
Ext.defer(function() {
Ext.widget('button', {
renderTo: id,
text:'Edit: ' + r.get('name'),
width: 75,
handler:function() { Ext.Msg.alert('Info', r.get('name')) }
});
}, 50);
returnExt.String.format('<div id="{0}"></div>', id);
}
}
],
renderTo:'output'
});
});