/** *模拟map */ Map = function(){ var mapAddM = { /** * entry函数 * @param {Object} key * @param {Object} val */ entry: function(key, val, flag){ this.key = key; this.value = val; this.flag = flag; }, //put方法 put: function(key, val, flag){ this.store[this.store.length] = new this.entry(key, val, flag); }, //get方法 get: function(key){ for (var i = 0; i < this.store.length; i++) { if (this.store[i].key === key) return this.store[i].value; } }, //get方法 getFlag: function(key){ for (var i = 0; i < this.store.length; i++) { if (this.store[i].key === key) return this.store[i].flag; } }, //remove方法 remove: function(key){ for (var i = 0; i < this.store.length; i++) { this.store[i].key === key && this.store.splice(i, 1); } }, //keyset keySet: function(){ var keyset = new Array; for (var i = 0; i < this.store.length; i++) keyset.push(this.store[i].key); return keyset; }, //valset valSet: function(){ var valSet = new Array; for (var i = 0; i < this.store.length; i++) valSet.push(this.store[i].value); return valSet; }, //flagSet flagSet: function(){ var flagSet = new Array; for (var i = 0; i < this.store.length; i++) flagSet.push(this.store[i].flag); return flagSet; }, //clear clear: function(){ this.store.length = 0; }, //size size: function(){ return this.store.length; }, /** * 迭代子 */ iterator: function(){ //TODO 待实现 var obj = this.keySet();//所有的key集合 var idx = 0; var me = { /** * 当前key */ current: function(){ return obj[idx - 1]; }, /** * 第一个key */ first: function(){ return obj[0]; }, /** * 最后一个key */ last: function(){ return obj[obj.length - 1]; }, /** * 是否还有下一个元素 */ hasNext: function(){ idx++; if (idx > obj.length || null == obj[obj.length - 1]) return false; return true; } }; return me; } }; for (var method in mapAddM) { this.store = new Array; Map.prototype[method] = mapAddM[method]; } } /** * 生成column * @param {Object} map */ function createColumns(map){ var columns = []; var i = 0; for (var it = map.iterator(); it.hasNext();) { var currentKey = it.current();//本次循环的key var currentVal = map.get(currentKey);//当前value var currentFlag = map.getFlag(currentKey);//判断是否隐藏该列 var columni = {}; columni.dataIndex = currentKey; columni.header = currentVal; columni.sortable = true; columni.width = 115; if ((currentFlag && (currentFlag == "hide"))) { columni.hidden = true; } columns.push(columni); i++; } return columns; } /** * 生成keyset集合 * @param {Object} map */ function createReaderColumns(map){ var columns = []; var i = 0; for (var it = map.iterator(); it.hasNext();) { var currentKey = it.current();//本次循环的key var columni = {}; columni.name = currentKey; columns.push(columni); i++; } return columns; } /** * 渲染extgrid */ var _pageSize = 10; function rendExtGrid(_url, _params, renderDiv, map){ jQuery("#" + renderDiv).html("");//清空已经存在的数据 /** * 读取数据代理 */ var proxy = new Ext.data.HttpProxy({ url: _url, method: "POST" }); /** * 记录 */ var record = Ext.data.Record.create(createReaderColumns(map)); /** * 解析数据的reader */ var reader = new Ext.data.JsonReader({ totalProperty: "Total", root: "Rows", }, record); /** * 数据源 */ var store = new Ext.data.Store({ proxy: proxy, reader: reader, baseParams: { method: "POST", searchParam: JSON.stringify(_params) //查詢參數 } }); /** * 遮罩 */ var loadMarsk = new Ext.LoadMask(document.body, { msg: '正在加载数据……', disabled: false, store: store }); //分页工具栏 var pagingToolbar = new Ext.PagingToolbar({ pageSize: _pageSize, store: store, displayInfo: true, displayMsg: '第{0}-第{1}条,一共{2}条', emptyMsg: "无数据", hideBorders: true, cls:"pageBar",//自定义样式 items: ['-', { pressed: false, enableToggle: true, cls: 'x-btn-text-icon details', toggleHandler: function(btn, pressed){ var view = grid.getView(); view.showPreview = pressed; view.refresh(); } }] }); //创建grid var grid = new Ext.grid.GridPanel({ store: store, region: 'center', border:false, mode: "remote", viewConfig: { layout: function(){ if (!this.mainBody) { return; } var g = this.grid; var c = g.getGridEl(); var csize = c.getSize(true); var vw = csize.width; if (!g.hideHeaders && (vw < 20 || csize.height < 20)) { return; } if (g.autoHeight) { if (this.innerHd) { this.innerHd.style.width = (vw) + 'px'; } } else { this.el.setSize(csize.width, csize.height); var hdHeight = this.mainHd.getHeight(); var vh = csize.height - (hdHeight); this.scroller.setSize(vw, vh); if (this.innerHd) { this.innerHd.style.width = (vw) + 'px'; } } if (this.forceFit) { if (this.lastViewWidth != vw) { this.fitColumns(false, false); this.lastViewWidth = vw; } } else { this.autoExpand(); this.syncHeaderScroll(); } this.onLayout(vw, vh); } }, columns: createColumns(map), frame: false, //表格外加边框 collapsible: true, animCollapse: false, autoHeight: true, autoWidth: true, autoScroll: true, height: 250, sm: new Ext.grid.RowSelectionModel({ singleSelect: true }), iconCls: 'icon-grid' }); store.load({ params: { start: 0, limit: _pageSize} }); /** * 容器:为了能宽高自适应 */ var viewPort = new Ext.Panel({ layout: 'fit', renderTo: renderDiv, autoScroll: false, height:400, bbar: pagingToolbar, items: [grid] }); }
相关推荐
EXTJS的组件库主要分为底层API、控件(widgets)和实用工具(Utils)三大部分。 - 底层API(core):提供DOM操作、事件处理和查询的基本功能,包括`DomHelper.js`和`Element.js`等文件。 - 控件(widgets):包括...
表格组件是展示大量数据的最佳选择,GridPanel则是Extjs中最强大的表格组件之一。 - **表格、表格面板**: 简要介绍了表格组件的基本概念。 - **列模型与数据**: 详细解释了如何定义列模型以及填充表格数据。 - **...
教程还提供了一个实用功能,允许用户选择本地数据库、表名,然后自动在GridPanel中显示数据。注意,这个示例是基于ASP.NET 2.0编译的。 在实现过程中,用户需要输入数据库名称,然后从出现的ComboBox列表中选择表名...
在这个例子中,我们将探讨如何在ExtJS 2.0中实现动态加载的Grid组件,这是一个非常实用的功能,尤其对于处理大量数据时,可以显著提高用户体验。 动态加载Grid意味着数据不是一次性全部加载到页面中,而是根据用户...
- **Store的作用**:解释了Store在Extjs中的角色,它是存储和管理数据的地方,可以绑定到各种UI组件上,如GridPanel等。 - **配置和使用Store**:介绍了如何创建和配置Store,以及如何将其绑定到特定的UI组件上。 - ...
这两个控件是Extjs框架中非常实用且功能丰富的部分,广泛应用于Web应用程序的界面设计与交互逻辑构建。 ### Tab Panel(标签页控件) Tab Panel组件允许开发者在一个界面上组织多个相关的页面或面板,每个页面通过...
综上所述,利用XML定义ExtJs Grid Title部分并结合Struts2 Action获取数据是一种实用的方法,它提高了代码的可维护性和灵活性。在开发过程中,根据项目的具体需求,还可以进一步优化和扩展这个解决方案。
2. 数据展示:ExtJS的GridPanel是用于显示和操作表格数据的关键组件。它支持分页、排序、过滤和编辑等功能,可以与后台数据库进行无缝交互。除此之外,TreePanel用于展示层级结构的数据,如组织架构或文件系统。 3....
ExtAspNet控件是专门为.NET平台设计的一套丰富的Web前端组件库,它将流行的JavaScript框架ExtJS与ASP.NET紧密结合,使得开发者能够轻松构建功能强大的、具有丰富用户体验的Web应用程序。本项目"ExtAspNet控件使用...