`

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

    博客分类:
  • flex
阅读更多

 

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

MyDataGrid.as

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

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

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);
			}
		}

	}
}

 

应用

<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>
 

 

分享到:
评论
2 楼 fogiguiuu 2010-10-23  
jessen 写道
listData 未定义?
能不能给个例子

listData应该是Button自带的,久了都忘了
1 楼 jessen 2010-10-18  
listData 未定义?
能不能给个例子

相关推荐

    flex datagrid 嵌套checkbox实现全选

    本示例关注的是在DataGrid中嵌套复选框(Checkbox),并实现全选功能。这在需要用户批量选择或操作数据的场景中非常常见。以下是对这个主题的详细讲解: 1. **Flex DataGrid组件**: Flex DataGrid是Adobe Flex...

    Flex中DataGrid内嵌CheckBox的全选反选和防止选择状态错乱实现方法

    本文将详细探讨如何在Flex的DataGrid中实现CheckBox的全选和反选功能,以及如何防止选择状态错乱的问题。 首先,我们需要创建一个自定义的DataGrid列类,这个类将扩展mx.controls.gridClasses.GridColumn,并且包含...

    flex Datagrid checkbox全选

    本文将详细讲解如何实现Flex Datagrid中checkbox的全选功能。 首先,我们要了解Flex Datagrid的基本结构。Datagrid由一系列DataGridColumn组成,每个列可以自定义渲染器来呈现不同类型的数据显示,例如文本、图片...

    flex在DataGrid中实现checkbox全选或取消

    本文将深入探讨如何在Flex中的DataGrid组件中实现复选框的全选与取消全选功能,这对于数据操作和用户交互至关重要。 在Flex的DataGrid组件中,我们通常会遇到这样的需求:当用户需要对多条记录进行批量操作时,如...

    在DataGrid中使用CheckBox,实现全选功能

    这篇博客“在DataGrid中使用CheckBox,实现全选功能”详细介绍了如何实现这一需求。 首先,我们需要在DataGrid的列定义中添加一个CheckBox列。在WPF中,可以使用DataGridTemplateColumn来自定义列模板,将CheckBox...

    WPF-DataGrid中CheckBox实现全选与非全选

    在实际应用中,我们经常需要在`DataGrid`中添加复选框(CheckBox)来实现行级别的选择功能,同时提供全选和非全选的功能。这个功能不仅方便用户批量操作,也为应用提供了更好的交互性。本教程将详细讲解如何在`WPF ...

    Flex DataGrid CheckBox 一个简单的全选

    总的来说,这个示例旨在教会开发者如何在Flex的DataGrid中实现全选功能,并且有效地管理CheckBox的选中状态。通过对DataGrid的自定义,我们可以灵活地扩展和优化这个功能,以满足不同业务需求。同时,了解和掌握这些...

    Flex Datagrid checkbox实现

    4. **双向绑定**:为了确保Datagrid的数据源和复选框的状态同步,我们可以使用双向数据绑定。这意味着当复选框状态改变时,数据源也会相应更新,反之亦然。 ```mxml &lt;mx:CheckBox id="myCheckbox" selected="{data....

    flex datagrid checkbox 全选/反选

    ### Flex DataGrid Checkbox 全选/反选知识点详解 #### 一、概述 Flex DataGrid 控件是Adobe Flex框架中的一个重要组成部分,它提供了一个灵活的方式来展示数据列表,并且支持多种功能,如排序、分组、筛选等。在...

    Flex dataGrid 全选、反选

    本文将详细讨论如何在Flex DataGrid中实现全选和反选功能,并结合`checkBox`来优化这一过程。 首先,我们要理解DataGrid的结构。DataGrid由多个列组成,每一列可能包含不同类型的控件,如文本、图像或复选框。在...

    DataGrid和AdvancedDataGrid CheckBox全选功能

    另一个部分是每个数据行中的CheckBox,它们的选中状态应与全选CheckBox保持同步。以下是如何实现这个功能的关键步骤: 1. **创建CheckBox**: 首先,你需要在`DataGrid`或`AdvancedDataGrid`的头部分添加一个...

    Flex Datagrid全选功能

    "Flex Datagrid全选功能"是指在Datagrid中实现一个功能,让用户能够一键选择所有行,这在处理大量数据时非常有用。下面我们将详细探讨如何在Flex中实现Datagrid的全选功能。 1. **Datagrid组件**: Datagrid是Adobe ...

    flex datagrid 标题栏添加 checkbox 和 数据行 checkbox 连动

    总的来说,实现Flex DataGrid标题栏添加复选框并使其与数据行的复选框联动,涉及到自定义HeaderRenderer和CellRenderer,以及对数据源和事件处理的深入理解。这需要开发者具备良好的Flex编程基础和组件定制能力。...

    winform DataGridView表头带CheckBox全选

    最后,别忘了在窗体的加载事件或其他适当的地方填充`DataGridView`的数据源,确保数据的正确显示。 通过以上步骤,我们就成功地在`Winform DataGridView`的表头添加了一个`CheckBox`,实现了全选/全不选的功能。...

    WPF在dataGrid中添加CheckBox支持单选,多选,全选功能

    项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。

    三种方式实现checkbox全选,反选

    以下是三种实现Checkbox全选和反选的方法,以及它们的JavaScript和Java实现细节。 ### 方法一:使用`checked`属性 **JavaScript实现**: 在JavaScript中,可以通过获取全选按钮的`checked`属性来控制所有复选框的...

    WPF CheckBox全选、反选比较通用

    在这个例子中,我们假设数据源是一个ObservableCollection,其中每个对象都有一个名为`Name`的属性(显示文本)和一个名为`IsSelected`的布尔属性(表示CheckBox的状态)。 为了实现全选功能,我们需要监听全选...

    flex datagrid分页 动态绑定数据源

    对于Datagrid,我们可以将数据源绑定到ArrayCollection或XMLListCollection等可迭代对象上。这样,无论是在初始化还是运行时改变数据源,Datagrid都会实时反映出数据的变化。 实现动态绑定数据源的步骤如下: 1. ...

    flex datagrid checkbox实现源码

    - `Main.mxml`: 主应用文件,创建DataGrid实例,设置数据源和itemRenderer,并绑定事件监听器。 6. **优化和性能考虑** - 使用位运算存储选中状态:当数据量较大时,使用位运算存储选中状态比数组更高效,因为位...

Global site tag (gtag.js) - Google Analytics