dataGrid过滤器查询和渲染器的使用

原创 2012年03月26日 09:19:12

以前没用过滤器,查询比较麻烦,需要遍历整个arrayCollecton

1.备份原来的数据

	private var myCt:ArrayCollection = new ArrayCollection();
			private var flag:Boolean = true;
			private function backup():void {
				if(flag) {
					myCt.removeAll();
					for(var i:int=0;i<myArrayCollection.length;i++) {
						var person:Object = myArrayCollection.getItemAt(i);
						myCt.addItem(person);
					}
				}
				flag = false;
			}

2.从备份中取出所有

	private function getAll():void {
				myArrayCollection.removeAll();
				for(var j:int=0;j<myCt.length;j++) {
					var temp:Object = myCt.getItemAt(j);
					myArrayCollection.addItem(temp);
				}
			}

以上两个方法都是为查询做准备的

3.查询

	private function selectInfo(key:String):void {
				//查询之前先备份绑定的ArrayCollection,并清空绑定的ArrayCollection
				backup();
				//遍历备份的数据
				if(key.length != 0) {
					myArrayCollection.removeAll();
					for(var i:int=0;i<myCt.length;i++) {
						var person:Object = myCt.getItemAt(i);
						if((person.num).indexOf(key) != -1 || (person.name).indexOf(key) != -1 || (person.company).indexOf(key) != -1) {
							myArrayCollection.addItem(person);
						} 
					}
					//如果查询结果为空
					if(myArrayCollection.length == 0) {
						Alert.show("没有查询到相关数据,请重新输入关键字查询!");
					}
				} else {
					//输入为空,返回所有数据
					getAll();
				}
				myData.invalidateList();
			}
上面是以对编号,姓名和公司的模糊查询


下面用filter来做:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.controls.CheckBox;
			import mx.core.FlexGlobals;
			import mx.events.FlexEvent;
			[Bindable]
			public var arr:ArrayCollection = new ArrayCollection([
				{name:'jim',num:'001',selected:true},
				{name:'tom',num:'002'},
				{name:'lucy',num:'003'}]);
			
			private function init():void
			{
				dg.dataProvider = arr;
			}
			
			private function textinput1_enterHandler(event:FlexEvent):void
			{
				arr.filterFunction = dgFilter;
				arr.refresh();
			}
			
			private function dgFilter(item:Object):Boolean{
				if(item["name"].toString().indexOf(txt.text)>=0 ){
					return true;
				}else if(item["num"].toString().indexOf(txt.text.toString())>=0 ){
					return true;
				}else{
					return false;
				}
			}
			
			public function a():void{
				Alert.show("hello");
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<mx:DataGrid id="dg"  x="166" y="57">
		<mx:columns>
			<mx:DataGridColumn  dataField="selected">
				<mx:itemRenderer>
					<fx:Component>
						<mx:Button label="click me" click="outerDocument.a()"/>
					</fx:Component>
				</mx:itemRenderer>
			</mx:DataGridColumn>
			<mx:DataGridColumn headerText="姓名" dataField="name"/>
			<mx:DataGridColumn headerText="编号" dataField="num"/>
		</mx:columns>
	</mx:DataGrid>
	<s:TextInput id="txt" x="166" y="27" enter="textinput1_enterHandler(event)"/>
</s:Application>
这样就很简单了

相关文章推荐

[软件渲染器入门]四-额外章节,使用技巧和并行处理来提高性能

由于我们的3D软件渲染引擎使用的是CPU运算,因此它将耗费大量的CPU处理时间。不过倒是有一个好消息,那就是CPU大多是多核心的。那么,我们可以想象一下使用并行处理来提高引擎性能。不过我们只能在C#中...

[软件渲染器入门]四,填充光栅化的三角形并使用深度缓冲

本章我们将讲解如何使用三角形光栅化算法来填充三角形。然后,我们将使用深度缓冲,以避免在后面的面跑到前面来的问题。...

Java Swing JTable 表格【11:表格使用自定义渲染器】

TableCellRenderer接口定义了JTable渲染器接口: 贴图如下: 渲染器对象作为一个方法的参数来实现针对表格中的单元格的不同设置的方法之一: ...

使用Marmoset Toolbag八猴渲染器的Marmoset Viewer进行离线本地观察

渲染器可以导出成Marmoset Viewer进行观察,这样既可以方便导出查看,在一定程度上又能保护自己的模型 但是生成的html文件往往没法在自己浏览器上运行,并不能加载模型 但发现这个并不是跨域问...

Java Swing JTable 表格【9:表格使用渲染器DefaultTableCellRenderer】

渲染器 渲染器用来绘制表格中的单元格,渲染器也可以从表格中提取每个单元格的方法,所以,渲染器也被称为绘制器,其实,当一个表格能够在容器中显示出来,是依靠系统默认的渲染器来绘制的,而且是一个单元格,...

Flex组件的项目渲染器(ItemRenderer)使用总结

Flex中提供了大量用于数据呈现的组件,这其中,以List系列组件最为常见,使用也最频繁,比如ComBoBox、List、Tree、 TileList、DataGrid等等。这些组件有一个共同的特性,...

理解项目编辑器---part3:编辑器与渲染器混合使用

In Part 1 and Part 2 of this series I covered how to make simple inline itemEditors as well as h...

Android渲染器Shader:LinearGradient(一)

 Android渲染器Shader:LinearGradient(一) LinearGradient是Android的线性渲染器。我写5个LinearGradient渲染器渲染后的View表现...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dataGrid过滤器查询和渲染器的使用
举报原因:
原因补充:

(最多只允许输入30个字)