X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/examples/ux/TableGrid.js diff --git a/examples/ux/TableGrid.js b/examples/ux/TableGrid.js new file mode 100644 index 00000000..8c172706 --- /dev/null +++ b/examples/ux/TableGrid.js @@ -0,0 +1,87 @@ +/*! + * Ext JS Library 3.0.0 + * Copyright(c) 2006-2009 Ext JS, LLC + * licensing@extjs.com + * http://www.extjs.com/license + */ +Ext.ns('Ext.ux.grid'); + +/** + * @class Ext.ux.grid.TableGrid + * @extends Ext.grid.GridPanel + * A Grid which creates itself from an existing HTML table element. + * @history + * 2007-03-01 Original version by Nige "Animal" White + * 2007-03-10 jvs Slightly refactored to reuse existing classes * @constructor + * @param {String/HTMLElement/Ext.Element} table The table element from which this grid will be created - + * The table MUST have some type of size defined for the grid to fill. The container will be + * automatically set to position relative if it isn't already. + * @param {Object} config A config object that sets properties on this grid and has two additional (optional) + * properties: fields and columns which allow for customizing data fields and columns for this grid. + */ +Ext.ux.grid.TableGrid = function(table, config){ + config = config || + {}; + Ext.apply(this, config); + var cf = config.fields || [], ch = config.columns || []; + table = Ext.get(table); + + var ct = table.insertSibling(); + + var fields = [], cols = []; + var headers = table.query("thead th"); + for (var i = 0, h; h = headers[i]; i++) { + var text = h.innerHTML; + var name = 'tcol-' + i; + + fields.push(Ext.applyIf(cf[i] || + {}, { + name: name, + mapping: 'td:nth(' + (i + 1) + ')/@innerHTML' + })); + + cols.push(Ext.applyIf(ch[i] || + {}, { + 'header': text, + 'dataIndex': name, + 'width': h.offsetWidth, + 'tooltip': h.title, + 'sortable': true + })); + } + + var ds = new Ext.data.Store({ + reader: new Ext.data.XmlReader({ + record: 'tbody tr' + }, fields) + }); + + ds.loadData(table.dom); + + var cm = new Ext.grid.ColumnModel(cols); + + if (config.width || config.height) { + ct.setSize(config.width || 'auto', config.height || 'auto'); + } + else { + ct.setWidth(table.getWidth()); + } + + if (config.remove !== false) { + table.remove(); + } + + Ext.applyIf(this, { + 'ds': ds, + 'cm': cm, + 'sm': new Ext.grid.RowSelectionModel(), + autoHeight: true, + autoWidth: false + }); + Ext.ux.grid.TableGrid.superclass.constructor.call(this, ct, {}); +}; + +Ext.extend(Ext.ux.grid.TableGrid, Ext.grid.GridPanel); + +//backwards compat +Ext.grid.TableGrid = Ext.ux.grid.TableGrid;