此文章翻译的官方文章,感觉还是有一些地方不是很详细

效果图:

ExtJS 4 Grid_microsoft



Ext.onReady(function () {
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['name', 'email', 'phone']
});

var userStore = Ext.create('Ext.data.Store', {
model: 'User',
//使用内联 数据
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' }
]
});
Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody(),
store:userStore,//数据源
width: 400,
height: 200,
title: 'Application Users',
columns: [
{
text: 'name',
width: 100,
sortable: false,
hideable: false,
dataIndex: 'name'
},
{
text:'Email Address',
width:150,
dataIndex: 'email',
hidden:false //隐藏了 这列
},
{
text:'Phone Number',
flex:1,
dataIndex:'phone'
}
]
});
});


我们创建了一个表格面板渲染到了body中,并且告诉它从之前创建的​​userStore​​中取得数据,最后我们定义了表格面板有哪些列,用​​dataIndex​​属性配置表格中的列和User Model中的字段的对应关系,​​Name​​列宽度是100,不能排序也不能隐藏,​​Email Address​​列默认是隐藏的(可以通过其他列的菜单控制显示),​​Phone Number​​列自适应表格剩余的宽度

 =================================================================================

 Fit布局+Grid

在Fit布局中,子元素将自动填满整个父容器。注意:在fit布局下,对其子元素设置宽度是无效的。如果在fit布局中放置了多个组件,则只会显示第一个子元素。典型的案例就是当客户要求一个window或panel中放置一个GRID组件,grid组件的大小会随着父容器的大小改变而改变。

这里的Grid的数据类型使用ArrayStore


ExtJS 4 Grid_二维_02ExtJS 4 Grid_ExtJS4_03Fit布局Grid+ArrayStore


var myData = [ 
['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'],
['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'],
['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'],
['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'],
['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'],
['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12:00am'],
['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'],
['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'],
['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'],
['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'],
['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'],
['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'],
['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'],
['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'],
['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
['International Business Machines', 81.41, 0.44, 0.54, '9/1 12:00am'],
['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'],
['McDonald\'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'],
['The Coca-Cola Company', 45.07, 0.26, 0.58, '9/1 12:00am'],
['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'],
['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9/1 12:00am'],
['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'],
['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'],
['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']
];
var store = Ext.create('Ext.data.ArrayStore', {
fields: [
{name: 'company'},
{name: 'price', type: 'float'},
{name: 'change', type: 'float'},
{name: 'pctChange', type: 'float'},
{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
],
data: myData
});

Ext.define('DataWindow',{
extend : 'Ext.window.Window',
title : 'Fit布局示例代码',
width: 550,
height:300,
layout : 'fit',
items : {
xtype : 'gridpanel',
store: store,
columns: [
{
text : 'Company',
flex : 1,
sortable : false,
dataIndex: 'company'
},
{
text : 'Price',
width : 75,
sortable : true,
renderer : 'usMoney',
dataIndex: 'price'
},
{
text : 'Change',
width : 75,
sortable : true,
dataIndex: 'change'
},
{
text : '% Change',
width : 75,
sortable : true,

dataIndex: 'pctChange'
},
{
text : 'Last Updated',
width : 85,
sortable : true,
renderer : Ext.util.Format.dateRenderer('m/d/Y'),
dataIndex: 'lastChange'
}]
}
});

Ext.onReady(function () {
var win = Ext.create("DataWindow", {
x: 10,
y: 20

});
win.show();//
});


 

效果图:

ExtJS 4 Grid_ExtJS4_04

 测试fit布局下放两个panel,因为默认只能显示一个,另一个必须要隐藏,有些类似于Card布局,只显示一个Panel内的内容:


ExtJS 4 Grid_二维_02ExtJS 4 Grid_ExtJS4_03View Code


var myData = [ 
['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'],
['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'],
['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'],
['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'],
['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'],
['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12:00am'],
['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'],
['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'],
['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'],
['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'],
['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'],
['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'],
['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'],
['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'],
['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
['International Business Machines', 81.41, 0.44, 0.54, '9/1 12:00am'],
['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'],
['McDonald\'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'],
['The Coca-Cola Company', 45.07, 0.26, 0.58, '9/1 12:00am'],
['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'],
['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9/1 12:00am'],
['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'],
['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'],
['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']
];
var store = Ext.create('Ext.data.ArrayStore', {
fields: [
{name: 'company'},
{name: 'price', type: 'float'},
{name: 'change', type: 'float'},
{name: 'pctChange', type: 'float'},
{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
],
data: myData
});
var grid = Ext.create('Ext.grid.Panel', {
//xtype: 'gridpanel',
store: store,
columns: [
{
text: 'Company',
flex: 1,
sortable: false,
dataIndex: 'company'
},
{
text: 'Price',
width: 75,
sortable: true,
renderer: 'usMoney',
dataIndex: 'price'
},
{
text: 'Change',
width: 75,
sortable: true,
dataIndex: 'change'
},
{
text: '% Change',
width: 75,
sortable: true,

dataIndex: 'pctChange'
},
{
text: 'Last Updated',
width: 85,
sortable: true,
renderer: Ext.util.Format.dateRenderer('m/d/Y'),
dataIndex: 'lastChange'
}]
});
function MenuClick(item) {
var win = Ext.getCmp("win1");
switch (item.tooltip) {
case "三维":
grid.show();
win.doLayout();
break;
case "二维":
grid.hide();
win.doLayout();
break;
default:
break;
}
}
var panel = Ext.create('Ext.panel.Panel', {
html:'22222222222222'
});
Ext.define('DataWindow', {
id: 'win1',
extend: 'Ext.window.Window',
title: 'Fit布局示例代码',
width: 550,
height: 300,
layout: 'fit',
dockedItems: [{
dock: 'top',
xtype: 'toolbar',
items: [{
xtype: 'button',
text: '三维',
tooltip: '三维',
handler:MenuClick
}, {
xtype: 'button',
text: '二维',
tooltip: '二维',
handler: MenuClick
}]
}],
items: [grid, panel]
});

Ext.onReady(function () {
var win = Ext.create("DataWindow", {
x: 10,
y: 20

});
win.show();//
});


ExtJS 4 Grid_示例代码_07

点击二维展示第二个panel内容。

ExtJS 4 Grid_ExtJS4_08