flex datagrid 嵌checkbox实现全选与数据存储(非绑定数据源)

 http://fogiguiuu.iteye.com/blog/591106

 

重写了DataGrid,主要是为了得到DataGrid的listItems属性,listItems保存了当前现显示的每一行的信息,还用了个ArrayCollection保存被选中了行的信息。

MyDataGrid.as

Java代码 复制代码  收藏代码
  1. package flex.components.checkdatagrid   
  2. {   
  3.     import mx.collections.ArrayCollection;   
  4.     import mx.controls.Alert;   
  5.     import mx.controls.DataGrid;   
  6.        
  7.     public class MyDataGrid extends DataGrid   
  8.     {   
  9.         protected var arrColl:ArrayCollection = null;  //保存被选中的信息   
  10.            
  11.         public function MyDataGrid()   
  12.         {   
  13.             super();   
  14.             arrColl = new ArrayCollection();   
  15.         }   
  16.            
  17.                 //方法名不该取这个的   
  18.         public function get listRendererArray():Array{     
  19.             return listItems;   
  20.         }   
  21.            
  22.         //add   
  23.         public function addToSelected(item:Object):void{   
  24.                
  25.             if(arrColl.getItemIndex(item)<0)   
  26.             {   
  27.                 arrColl.addItem(item);   
  28.             }   
  29.         }   
  30.            
  31.         //del   
  32.         public function delFromSelected(item:Object):void{   
  33.                
  34.             if(arrColl.getItemIndex(item)>-1)   
  35.             {   
  36.                 arrColl.removeItemAt(arrColl.getItemIndex(item));   
  37.             }   
  38.         }   
  39.            
  40.         //isIn   
  41.         public function isInSelected(item:Object):Boolean{   
  42.                
  43.             if(arrColl.getItemIndex(item)<0)   
  44.             {   
  45.                 return false;   
  46.             }   
  47.             else  
  48.             {   
  49.                 return true;   
  50.             }   
  51.         }   
  52.            
  53.         public function getSelected():ArrayCollection{   
  54.             return arrColl;   
  55.         }   
  56.     }   
  57. }  
package flex.components.checkdatagrid
{
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.controls.DataGrid;
	
	public class MyDataGrid extends DataGrid
	{
		protected var arrColl:ArrayCollection = null;  //保存被选中的信息
		
		public function MyDataGrid()
		{
			super();
			arrColl = new ArrayCollection();
		}
		
                //方法名不该取这个的
		public function get listRendererArray():Array{  
			return listItems;
		}
		
		//add
		public function addToSelected(item:Object):void{
			
			if(arrColl.getItemIndex(item)<0)
			{
				arrColl.addItem(item);
			}
		}
		
		//del
		public function delFromSelected(item:Object):void{
			
			if(arrColl.getItemIndex(item)>-1)
			{
				arrColl.removeItemAt(arrColl.getItemIndex(item));
			}
		}
		
		//isIn
		public function isInSelected(item:Object):Boolean{
			
			if(arrColl.getItemIndex(item)<0)
			{
				return false;
			}
			else
			{
				return true;
			}
		}
		
		public function getSelected():ArrayCollection{
			return arrColl;
		}
	}
}
 

CheckHeadBoxIR.as  实现全选用的checkbox

Java代码 复制代码  收藏代码
  1. package flex.components.checkdatagrid   
  2. {   
  3.     import flash.display.DisplayObject;   
  4.     import flash.events.Event;   
  5.     import flash.text.TextField;   
  6.        
  7.     import mx.controls.CheckBox;   
  8.     import mx.controls.DataGrid;   
  9.     import mx.events.DataGridEvent;   
  10.   
  11.     public class CheckHeadBoxIR extends CheckBox   
  12.     {   
  13.         public function CheckHeadBoxIR(){   
  14.             super();   
  15.             this.addEventListener(Event.CHANGE, cgHandler);   
  16.         }   
  17.            
  18.         override public function set data(value:Object) : void{   
  19.             //super.data = value;    //一定不要有这句   
  20.             this.selected = false;   
  21.             DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);   
  22.         }   
  23.            
  24.         private function sortEventHandler(event:DataGridEvent):void{   
  25.                
  26.             if(event.itemRenderer == this)   
  27.             {   
  28.                 event.preventDefault();   
  29.             }   
  30.         }   
  31.            
  32.         //居中显示   
  33.         override protected function updateDisplayList(w:Number, h:Number) : void{   
  34.             super.updateDisplayList(w, h);   
  35.                
  36.             for(var i:Number=0; i<numChildren; i++)   
  37.             {   
  38.                 var c:DisplayObject = getChildAt(i);   
  39.                 if(!(c is TextField))   
  40.                 {   
  41.                     c.x = Math.round((w-c.width)/2);   
  42.                     c.y = Math.round((h-c.height)/2);   
  43.                 }   
  44.             }   
  45.         }   
  46.            
  47.         protected function cgHandler(event:Event):void{   
  48.                
  49.             //得到DataGrid里的listItems   
  50.             var listItems:Array =  MyDataGrid(listData.owner).listRendererArray;   
  51.                
  52.             if(listItems.length>0)   
  53.             {   
  54.                 for(var i:Number=0; i<listItems.length; i++)   
  55.                 {   
  56.                     if(listItems[i].length>0)   
  57.                     {   
  58.                         if(listItems[i][0].selected != this.selected)   
  59.                         {   
  60.                             listItems[i][0].selected = this.selected;   
  61.                             listItems[i][0].dispatchEvent(new Event(Event.CHANGE));   
  62.                         }   
  63.                     }   
  64.                 }   
  65.             }   
  66.             /*var ii:Object = dataGrid.indexToItemRenderer(2).data;*/  
  67.         }   
  68.     }   
  69. }  
package flex.components.checkdatagrid
{
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.text.TextField;
	
	import mx.controls.CheckBox;
	import mx.controls.DataGrid;
	import mx.events.DataGridEvent;

	public class CheckHeadBoxIR extends CheckBox
	{
		public function CheckHeadBoxIR(){
			super();
			this.addEventListener(Event.CHANGE, cgHandler);
		}
		
		override public function set data(value:Object) : void{
			//super.data = value;    //一定不要有这句
			this.selected = false;
			DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);
		}
		
		private function sortEventHandler(event:DataGridEvent):void{
			
			if(event.itemRenderer == this)
			{
				event.preventDefault();
			}
		}
		
		//居中显示
		override protected function updateDisplayList(w:Number, h:Number) : void{
			super.updateDisplayList(w, h);
			
			for(var i:Number=0; i<numChildren; i++)
			{
				var c:DisplayObject = getChildAt(i);
				if(!(c is TextField))
				{
					c.x = Math.round((w-c.width)/2);
					c.y = Math.round((h-c.height)/2);
				}
			}
		}
		
		protected function cgHandler(event:Event):void{
			
			//得到DataGrid里的listItems
			var listItems:Array =  MyDataGrid(listData.owner).listRendererArray;
			
			if(listItems.length>0)
			{
				for(var i:Number=0; i<listItems.length; i++)
				{
					if(listItems[i].length>0)
					{
						if(listItems[i][0].selected != this.selected)
						{
							listItems[i][0].selected = this.selected;
							listItems[i][0].dispatchEvent(new Event(Event.CHANGE));
						}
					}
				}
			}
			/*var ii:Object = dataGrid.indexToItemRenderer(2).data;*/
		}
	}
}
 

CheckBoxIR.as

Java代码 复制代码  收藏代码
  1. package flex.components.checkdatagrid   
  2. {   
  3.        
  4.     import flash.display.DisplayObject;   
  5.     import flash.events.Event;   
  6.     import flash.text.TextField;   
  7.        
  8.     import mx.collections.ArrayCollection;   
  9.     import mx.controls.Alert;   
  10.     import mx.controls.CheckBox;   
  11.        
  12.     public class CheckBoxIR extends CheckBox{   
  13.            
  14.         public function CheckBoxIR(){   
  15.             super();   
  16.             this.addEventListener(Event.CHANGE, cgHandler);   
  17.         }   
  18.            
  19.         override public function set data(value:Object) : void{   
  20.             super.data = value;   
  21.   
  22.                
  23.             if(MyDataGrid(listData.owner).isInSelected(data.id))   
  24.             {   
  25.                 this.selected = true;   
  26.             }   
  27.             else  
  28.             {   
  29.                 this.selected = false;   
  30.             }   
  31.                
  32.         //  Alert.show("int set data--"+data.@id);   
  33.         }   
  34.            
  35.            
  36.         //居中显示   
  37.         override protected function updateDisplayList(w:Number, h:Number) : void{   
  38.             super.updateDisplayList(w, h);   
  39.                
  40.             for(var i:Number=0; i<numChildren; i++)   
  41.             {   
  42.                 var c:DisplayObject = getChildAt(i);   
  43.                 if(!(c is TextField))   
  44.                 {   
  45.                     c.x = Math.round((w-c.width)/2);   
  46.                     c.y = Math.round((h-c.height)/2);   
  47.                 }   
  48.             }   
  49.         }   
  50.            
  51.         protected function cgHandler(event:Event):void{   
  52.        
  53.             var dg:MyDataGrid = MyDataGrid(listData.owner);   
  54.                
  55.             if(this.selected == true)   
  56.             {   
  57.                 dg.addToSelected(data.id);   
  58.             }   
  59.             else  
  60.             {   
  61.                 dg.delFromSelected(data.id);   
  62.             }   
  63.         }   
  64.   
  65.     }   
  66. }  
package flex.components.checkdatagrid
{
	
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.text.TextField;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.controls.CheckBox;
	
	public class CheckBoxIR extends CheckBox{
		
		public function CheckBoxIR(){
			super();
			this.addEventListener(Event.CHANGE, cgHandler);
		}
		
		override public function set data(value:Object) : void{
			super.data = value;

			
			if(MyDataGrid(listData.owner).isInSelected(data.id))
			{
				this.selected = true;
			}
			else
			{
				this.selected = false;
			}
			
		//	Alert.show("int set data--"+data.@id);
		}
		
		
		//居中显示
		override protected function updateDisplayList(w:Number, h:Number) : void{
			super.updateDisplayList(w, h);
			
			for(var i:Number=0; i<numChildren; i++)
			{
				var c:DisplayObject = getChildAt(i);
				if(!(c is TextField))
				{
					c.x = Math.round((w-c.width)/2);
					c.y = Math.round((h-c.height)/2);
				}
			}
		}
		
		protected function cgHandler(event:Event):void{
	
			var dg:MyDataGrid = MyDataGrid(listData.owner);
			
			if(this.selected == true)
			{
				dg.addToSelected(data.id);
			}
			else
			{
				dg.delFromSelected(data.id);
			}
		}

	}
}

 

应用

Java代码 复制代码  收藏代码
  1. <checkdatagrid:MyDataGrid width="100%" borderStyle="outset" height="366"    
  2.                                    id="orderInfo" dataProvider="{data}" >   
  3.             <checkdatagrid:columns>   
  4.                 <mx:DataGridColumn headerRenderer=flex.components.checkdatagrid.CheckHeadBoxIR" itemRenderer="flex.components.checkdatagrid.CheckBoxIR" width="30"/>   
  5.             </checkdatagrid:columns>   
  6.         </checkdatagrid:MyDataGrid>  
<checkdatagrid:MyDataGrid width="100%" borderStyle="outset" height="366" 
								   id="orderInfo" dataProvider="{data}" >
			<checkdatagrid:columns>
				<mx:DataGridColumn headerRenderer=flex.components.checkdatagrid.CheckHeadBoxIR" itemRenderer="flex.components.checkdatagrid.CheckBoxIR" width="30"/>
			</checkdatagrid:columns>
		</checkdatagrid:MyDataGrid>
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值