`

ExtJs实现SearchGrid查询表格

 
阅读更多

实现在表格头部下文可以有对应的查询框,如附件图。代码如下:

 

	Ext.override(Ext.grid.GridView,{
	/**
	* 通过下标获取查询单个单元格元素
	**/
		getSearchCell : function(index) {
			return this.mainSh.dom.getElementsByTagName('td')[index];
		},
		/**
		* 手动拖拉表头列的宽度
		**/
		updateColumnWidth : function(column, width) {

			var columnWidth = this.getColumnWidth(column),
				totalWidth  = this.getTotalWidth(),
				headerCell  = this.getHeaderCell(column),
				searchCell  = this.getSearchCell(column),//获取查询单元格元素
				nodes       = this.getRows(),
				nodeCount   = nodes.length,
				row, i, firstChild;
			
			this.updateHeaderWidth();
			this.updateSearchWidth();//更新所有查询列的宽度
			headerCell.style.width = columnWidth;
			searchCell.style.width = columnWidth;//更新当前单元格的宽度
			for (i = 0; i < nodeCount; i++) {
				row = nodes[i];
				firstChild = row.firstChild;
				
				row.style.width = totalWidth;
				if (firstChild) {
					firstChild.style.width = totalWidth;
					firstChild.rows[0].childNodes[column].style.width = columnWidth;
				}
			}
			
			this.onColumnWidthUpdated(column, columnWidth, totalWidth);
		},
		renderUI : function() {
			var templates = this.templates;
			
			return templates.master.apply({
				body  : templates.body.apply({rows:'&#160;'}),
				header: this.renderHeaders(),
				ostyle: 'width:' + this.getOffsetWidth() + ';',
				bstyle: 'width:' + this.getTotalWidth()  + ';',
				search:this.renderSearch()//渲染
			});
		},
		/**
		* 更新查询列
		**/
		updateSearch : function() {
			this.innerSh.firstChild.innerHTML = this.renderSearch();
			this.updateSearchWidth(false);
		},
		
		/**
		 * 更新查询列的宽度
		 */
		updateSearchWidth: function(updateMain) {
			var innerShChild = this.innerSh.firstChild,
				totalWidth   = this.getTotalWidth();
			
			innerShChild.style.width = this.getOffsetWidth();
			innerShChild.firstChild.style.width = totalWidth;

			if (updateMain !== false) {
				this.mainBody.dom.style.width = totalWidth;
			}
		},
		initElements : function() {
			var Element  = Ext.Element,
				el       = Ext.get(this.grid.getGridEl().dom.firstChild),
				mainWrap = new Element(el.child('div.x-grid3-viewport')),
				mainHd   = new Element(mainWrap.child('div.x-grid3-header')),
				mainSh   = new Element(mainWrap.child('div.x-grid3-search')),//在原来的基础上加查询行
				scroller = new Element(mainWrap.child('div.x-grid3-scroller'));
			
			if (this.grid.hideHeaders) {
				mainHd.setDisplayed(false);
			}
			
			if (this.forceFit) {
				scroller.setStyle('overflow-x', 'hidden');
			}
			
			/**
			 * <i>Read-only</i>. The GridView's body Element which encapsulates all rows in the Grid.
			 * This {@link Ext.Element Element} is only available after the GridPanel has been rendered.
			 * @type Ext.Element
			 * @property mainBody
			 */
			
			Ext.apply(this, {
				el      : el,
				mainWrap: mainWrap,
				scroller: scroller,
				mainHd  : mainHd,
				mainSh  : mainSh,
				innerHd : mainHd.child('div.x-grid3-header-inner').dom,
				innerSh : mainSh.child('div.x-grid3-search-inner').dom,//在原来的基础上加上查询列
				mainBody: new Element(Element.fly(scroller).child('div.x-grid3-body')),
				focusEl : new Element(Element.fly(scroller).child('a')),
				
				resizeMarker: new Element(el.child('div.x-grid3-resize-marker')),
				resizeProxy : new Element(el.child('div.x-grid3-resize-proxy'))
			});
			
			this.focusEl.swallowEvent('click', true);
		},  
	
		masterTpl:new Ext.Template(
			'<div class="x-grid3" hidefocus="true">',
				'<div class="x-grid3-viewport">',
					'<div class="x-grid3-header">',
						'<div class="x-grid3-header-inner">',
							'<div class="x-grid3-header-offset" style="{ostyle}">{header}</div>',
						'</div>',
						'<div class="x-clear"></div>',
					'</div>',
					//查询框所需要的模板
					 '<div class="x-grid3-search">',
						'<div class="x-grid3-search-inner">',
							'<div class="x-grid3-search-offset" style="{ostyle}">{search}</div>',
						'</div>',
						'<div class="x-clear"></div>',
					'</div>',
					//========================
					'<div class="x-grid3-scroller">',
						'<div class="x-grid3-body" style="{bstyle}">{body}</div>',
						'<a href="#" class="x-grid3-focus" tabIndex="-1"></a>',
					'</div>',
				'</div>',
				'<div class="x-grid3-resize-marker">&#160;</div>',
				'<div class="x-grid3-resize-proxy">&#160;</div>',
			'</div>'
		),
		/**
		* 渲染查询表格
		**/
		renderSearch : function() {
				var colModel   = this.cm,
				templates  = this.templates,
				properties = {},
				colCount   = colModel.getColumnCount(),
				searchCells = [],
				i;
				templates.sCell=new Ext.Template(
					'<td style="{style}" ><div id="search-{id}"></div></td>'//列的模板,id可以在columnModel设置,如果没有则是从0开始,例如search-0,search-2,后面我们使用search-{id}来渲染我们所需要的查询控件
				);
				templates.seatchTpl=new Ext.Template(
					'<table  border="0" cellspacing="0" cellpadding="0" style="{tstyle}"><tr>{cells}</tr></table>'//整个查询框的模板
				);
				for (i = 0; i < colCount; i++) {
					
					properties = {
						id     : colModel.getColumnId(i),
						style  : this.getColumnStyle(i, true)
					};
					
					searchCells[i] = templates.sCell.apply(properties);
					
				}
				return templates.seatchTpl.apply({
					cells: searchCells.join(""),
					tstyle: String.format("width: {0};", this.getTotalWidth())
				});
		}
	});

 使用方法:

 

注意要在表格数据加载后,执行下面这段话,这个顺序一定要注意,要不可以渲染不了。

	//例子
    var combo = new Ext.form.ComboBox({
        store: store,
        displayField:'state',
        mode: 'local',
        triggerAction: 'all',
		width:100,
        renderTo: 'search-2'//这个就是在渲染的DIV的ID,在templates.sCell定义了这个ID
    });

 

 

  • 大小: 26.6 KB
1
3
分享到:
评论
2 楼 lyndon.lin 2011-08-22  
这个和分页没关系,分页该怎么写你就怎么写。
1 楼 wdq 2011-08-22  
不知道你这个查询完以后有没有做分页?

相关推荐

    extjs动态生成表格,前台+后台

    在本文中,我们将深入探讨如何使用ExtJS框架在前端动态生成表格,并结合后端数据进行展示。ExtJS是一个强大的JavaScript库,专用于构建富客户端Web应用程序,尤其在创建交互式用户界面方面表现突出。动态生成表格是...

    EXTjs4.0以下合并表格

    在EXTjs 4.0以下的版本中,开发人员可能会遇到合并表格单元格的需求,这在展示复杂数据或者组织信息时非常有用。EXTjs提供了强大的表格网格组件(GridPanel),允许自定义布局和样式,包括单元格的合并。 在EXTjs中...

    extjs 可编辑的表格树 Ext.tree.ColumnTree Ext.tree.ColumnTreeEditor

    extjs 可编辑的表格树,每个单元格自定义编辑组件,可以自适应列宽,只有源码与例子,运行实例要修改路径,不然图片不能显示,注意etree.jsp的js引入路径 支持Ext2.x以上版本 如运行不了EmailTo : codeme9@gmail....

    EXTJS 4 树形表格组件使用示例

    5. **分页和过滤**:树形表格组件可以集成分页功能,对于大量数据,可以实现局部加载,提高性能。同时,它还支持行级别的过滤,可以根据指定条件筛选显示的节点。 6. **可扩展性**:EXTJS 4的设计使得树形表格组件...

    extjs模拟excel表格

    在本文中,我们将深入探讨如何使用ExtJS来模拟Excel表格,以及实现Excel的各种功能。 首先,ExtJS中的GridPanel组件是实现模拟Excel表格的核心。GridPanel允许我们展示大量数据,并提供了诸如排序、过滤、分页等...

    ExtJS Filter 实现表格过滤

    ExtJS 是一个强大的JavaScript库,专门用于构建...以上就是关于ExtJS Grid Filter实现表格过滤的基本介绍和应用场景。在实际开发中,根据项目需求,灵活运用各种过滤策略,可以极大地提升数据管理的便捷性和用户体验。

    extjs 在线sql查询

    1. **ExtJS Grid Panel**: 这是ExtJS中的一个核心组件,用于展示数据表格。用户可能通过Grid Panel查看查询结果,并进行排序、过滤和分页。 2. **Data Store**: ExtJS的数据存储机制,用于缓存和管理服务器端获取的...

    EXTJS插件风格的表格合并示例.rar

    一款基于EXTJS插件风格的表格合并示例,界面不用说了,使用EXT本身的界面风格,很漂亮,EXT功能很强大,这个表格合并功能只是其中一个比较实用的功能,这个例子带给大家,希望通过这个例子你会对EXT有更多的了解。

    自定义高级查询Extjs

    在这个场景中,"自定义高级查询Extjs"指的是利用Ext JS框架来构建这样的功能。Ext JS是一个流行的JavaScript库,用于创建富客户端应用程序,特别是与数据展示和操作相关的Web应用。 1. **Ext JS简介** - Ext JS...

    Extjs4.2 Grid filter Demo 表格过滤实验

    这是利用sencha cmd 生成的GridFilterDemo工程中的app和build文件夹,其余文件过大并且与主题无关,因此未包含。具体方法,请参看我的博客: 《Extjs4.2 Grid Filter Feature 表格过滤特性》

    Extjs表格合并代码

    在本文中,我们将深入探讨如何在ExtJS框架中实现表格单元格的合并,以及解决不同浏览器间盒模型差异带来的布局问题。ExtJS是一款强大的JavaScript库,用于构建富客户端应用程序,其表格组件是功能丰富的数据展示工具...

    extjs2.0 画的一个带查询条件和查询结果的页面

    在这个场景下,查询条件可能通过一个表单来实现,而查询结果则会用网格或表格来展示。 1. **查询条件**: 在ExtJS中,我们可以使用`Ext.form.FormPanel`创建一个包含输入字段的表单,这些字段对应于查询条件。例如...

    Extjs 实现多行合并(rowspan)效果

    在ExtJS中实现多行合并(rowspan)的效果,通常是为了在数据表格中展示具有层次结构的数据,或者在某些特定情况下需要对表格行进行合并,以优化数据的展示。这通常涉及到对表格(GridPanel)的配置和自定义。下面...

    extjs构造矩阵表格

    下面我们将深入探讨EXTJS构建矩阵表格的步骤和涉及的技术点。 1. **创建数据存储(Store)**: - `TMstore` 是一个包含整个矩阵数据的主Store,通过HttpProxy连接到服务器端的'json/getMatrixInfo.do'获取数据,...

    extjs实现的带标签、翻页动画的书

    在本项目中,“extjs实现的带标签、翻页动画的书”显然利用了ExtJS的组件化特性和动画功能,创建了一个模拟真实书籍阅读体验的应用。 首先,我们来看看“标签”这一概念。在Web应用中,标签(Tab)通常用来组织和...

    ExtjS实现聊天功能

    在这个"ExtJS实现聊天功能"的项目中,我们将探讨如何利用ExtJS框架构建一个类似于QQ的聊天应用程序。 首先,我们要理解聊天功能的核心要素。一个基本的聊天应用通常包含以下部分: 1. **用户界面**:ExtJS提供了...

    extjs实现增删查改

    在“extjs实现增删查改”这个主题中,我们将探讨如何使用ExtJS来实现基本的数据操作功能。 首先,增删查改(CRUD,Create, Read, Update, Delete)是任何数据管理应用的核心功能。在ExtJS中,我们可以利用Grid ...

    extjs 实现动态表头

    标题“extjs 实现动态表头”表明我们要讨论的是如何在ExtJS环境中构建一个能够动态改变列头的表格。动态表头的核心在于理解ExtJS的GridPanel组件和ColumnModel类。GridPanel用于显示数据,而ColumnModel则定义了...

    Extjs 轻松实现下拉框联动

    最近小弟做了Extjs实现实现下拉框联动的效果,参考了好久才学会,闲下来发一个简单的例子。。呵呵

    Extjs 4.2分组小计

    让我们深入探讨一下如何在ExtJS 4.2中实现分组小计。 首先,我们需要理解ExtJS中的Grid组件。Grid是一种可配置的、可滚动的数据展示视图,用于显示二维数据集。分组功能允许我们将数据按照一个或多个字段进行分组,...

Global site tag (gtag.js) - Google Analytics