commit extjs-2.2.1
[extjs.git] / examples / form / form-grid.js
1 /*\r
2  * Ext JS Library 2.2.1\r
3  * Copyright(c) 2006-2009, Ext JS, LLC.\r
4  * licensing@extjs.com\r
5  * \r
6  * http://extjs.com/license\r
7  */\r
8 \r
9 Ext.onReady(function(){\r
10 \r
11     Ext.QuickTips.init();\r
12 \r
13     // turn on validation errors beside the field globally\r
14     Ext.form.Field.prototype.msgTarget = 'side';\r
15 \r
16     var bd = Ext.getBody();\r
17 \r
18 //   Define the Grid data and create the Grid\r
19     var myData = [\r
20         ['3m Co',71.72,0.02,0.03,'9/1 12:00am'],\r
21         ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'],\r
22         ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'],\r
23         ['American Express Company',52.55,0.01,0.02,'9/1 12:00am'],\r
24         ['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am'],\r
25         ['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am'],\r
26         ['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am'],\r
27         ['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am'],\r
28         ['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am'],\r
29         ['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am'],\r
30         ['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am'],\r
31         ['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am'],\r
32         ['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am'],\r
33         ['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am'],\r
34         ['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am'],\r
35         ['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am'],\r
36         ['International Business Machines',81.41,0.44,0.54,'9/1 12:00am'],\r
37         ['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am'],\r
38         ['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am'],\r
39         ['McDonald\'s Corporation',36.76,0.86,2.40,'9/1 12:00am'],\r
40         ['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am'],\r
41         ['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am'],\r
42         ['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am'],\r
43         ['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am'],\r
44         ['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am'],\r
45         ['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am'],\r
46         ['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am'],\r
47         ['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am'],\r
48         ['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am']\r
49     ];\r
50 \r
51     var ds = new Ext.data.Store({\r
52         reader: new Ext.data.ArrayReader({}, [\r
53                {name: 'company'},\r
54                {name: 'price', type: 'float'},\r
55                {name: 'change', type: 'float'},\r
56                {name: 'pctChange', type: 'float'},\r
57                {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}\r
58           ])\r
59     });\r
60     ds.loadData(myData);\r
61 \r
62     // example of custom renderer function\r
63     function italic(value){\r
64         return '<i>' + value + '</i>';\r
65     }\r
66 \r
67     // example of custom renderer function\r
68     function change(val){\r
69         if(val > 0){\r
70             return '<span style="color:green;">' + val + '</span>';\r
71         }else if(val < 0){\r
72             return '<span style="color:red;">' + val + '</span>';\r
73         }\r
74         return val;\r
75     }\r
76     // example of custom renderer function\r
77     function pctChange(val){\r
78         if(val > 0){\r
79             return '<span style="color:green;">' + val + '%</span>';\r
80         }else if(val < 0){\r
81             return '<span style="color:red;">' + val + '%</span>';\r
82         }\r
83         return val;\r
84     }\r
85 \r
86     // the DefaultColumnModel expects this blob to define columns. It can be extended to provide\r
87     // custom or reusable ColumnModels\r
88     var colModel = new Ext.grid.ColumnModel([\r
89         {id:'company',header: "Company", width: 160, sortable: true, locked:false, dataIndex: 'company'},\r
90         {header: "Price", width: 75, sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'},\r
91         {header: "Change", width: 75, sortable: true, renderer: change, dataIndex: 'change'},\r
92         {header: "% Change", width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},\r
93         {header: "Last Updated", width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}\r
94     ]);\r
95 \r
96     bd.createChild({tag: 'h2', html: 'Using a Grid with a Form'});\r
97 \r
98 /*\r
99  *      Here is where we create the Form\r
100  */\r
101     var gridForm = new Ext.FormPanel({\r
102         id: 'company-form',\r
103         frame: true,\r
104         labelAlign: 'left',\r
105         title: 'Company data',\r
106         bodyStyle:'padding:5px',\r
107         width: 750,\r
108         layout: 'column',       // Specifies that the items will now be arranged in columns\r
109         items: [{\r
110             columnWidth: 0.6,\r
111             layout: 'fit',\r
112             items: {\r
113                     xtype: 'grid',\r
114                     ds: ds,\r
115                     cm: colModel,\r
116                     sm: new Ext.grid.RowSelectionModel({\r
117                         singleSelect: true,\r
118                         listeners: {\r
119                             rowselect: function(sm, row, rec) {\r
120                                 Ext.getCmp("company-form").getForm().loadRecord(rec);\r
121                             }\r
122                         }\r
123                     }),\r
124                     autoExpandColumn: 'company',\r
125                     height: 350,\r
126                     title:'Company Data',\r
127                     border: true,\r
128                         listeners: {\r
129                                 render: function(g) {\r
130                                         g.getSelectionModel().selectRow(0);\r
131                                 },\r
132                                 delay: 10 // Allow rows to be rendered.\r
133                         }\r
134                 }\r
135         },{\r
136                 columnWidth: 0.4,\r
137             xtype: 'fieldset',\r
138             labelWidth: 90,\r
139             title:'Company details',\r
140             defaults: {width: 140},     // Default config options for child items\r
141             defaultType: 'textfield',\r
142             autoHeight: true,\r
143             bodyStyle: Ext.isIE ? 'padding:0 0 5px 15px;' : 'padding:10px 15px;',\r
144             border: false,\r
145             style: {\r
146                 "margin-left": "10px", // when you add custom margin in IE 6...\r
147                 "margin-right": Ext.isIE6 ? (Ext.isStrict ? "-10px" : "-13px") : "0"  // you have to adjust for it somewhere else\r
148             },\r
149             items: [{\r
150                 fieldLabel: 'Name',\r
151                 name: 'company'\r
152             },{\r
153                 fieldLabel: 'Price',\r
154                 name: 'price'\r
155             },{\r
156                 fieldLabel: '% Change',\r
157                 name: 'pctChange'\r
158             },{\r
159                 xtype: 'datefield',\r
160                 fieldLabel: 'Last Updated',\r
161                 name: 'lastChange'\r
162             }]\r
163         }],\r
164         renderTo: bd\r
165     });\r
166     \r
167     //  Create Panel view code. Ignore.\r
168     createCodePanel('form-grid.js', 'View code to create this Form');\r
169 });