`
fogiguiuu
  • 浏览: 31040 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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

    博客分类:
  • flex
阅读更多

  回来还是把以前弄得粘在这吧,感觉自己写的这些都不能正式用,只是自己写写。

 

  以前写的http://fogiguiuu.iteye.com/blog/591106,这里稍改下,以前那个用的话比较麻烦。

  有两个类DgAssist.as是用来存储已选择的需要存储的数据,还有DgCheckBox2.as。

 

package 
{
	import flash.events.Event;
	
	import mx.collections.ArrayCollection;
	import mx.controls.CheckBox;
	import mx.controls.DataGrid;

	public class DgAssist
	{
		//存储数据数组
		protected var data:ArrayCollection = null;
		
		public function DgAssist()
		{
			data = new ArrayCollection();
		}
		
		
		//add
		public function addToSelected(item:Object):void{
			
			if(data.getItemIndex(item)<0)
			{
				data.addItem(item);
			}
		}
		
		//del
		public function delFromSelected(item:Object):void{
			
			if(data.getItemIndex(item)>-1)
			{
				data.removeItemAt(data.getItemIndex(item));
			}
		}
		
		//isIn
		public function isInSelected(item:Object):Boolean{
			
			if(data.getItemIndex(item)<0)
			{
				return false;
			}
			else
			{
				return true;
			}
		}
		
		public function getData():ArrayCollection{
			return data;
		}
		
		//对checkbox在第一列的datagrid进行全选
		public static function selectedAll(dg:DataGrid, selected:Boolean=true):void{
			
			if(dg != null)
			{
				for(var i:Number=0; i<dg.rowCount; i++)
				{
					if(dg.indexToItemRenderer(i) is CheckBox)
					{
						if(CheckBox(dg.indexToItemRenderer(i)).selected != selected)
						{
							CheckBox(dg.indexToItemRenderer(i)).selected = selected;
							CheckBox(dg.indexToItemRenderer(i)).dispatchEvent(new Event(Event.CHANGE));
						}
					}
				}
			}
		}
		
	}
}
 
// ActionScript file
package
{
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.text.TextField;
	
	import mx.controls.CheckBox;
	import mx.controls.DataGrid;
	import mx.controls.dataGridClasses.DataGridColumn;
	import mx.events.DataGridEvent;
	
	public class DgCheckBox2 extends CheckBox{
		
		
		protected var dgAssist:DgAssist = null;
		
		protected var dgData:Object = null;
		
		public function DgCheckBox2(){
			
			super();
			
			this.addEventListener(Event.CHANGE, cgHandler);
		}
		
		//初始化数据
		protected function initCK():void{
			
			if(data != null && data.hasOwnProperty("id"))
			{
				dgData = data.id;
			}
			
			if(this.parentDocument != null && this.parentDocument.hasOwnProperty("dgAssist"))
			{
				dgAssist = this.parentDocument.dgAssist;
			}
		}
		
		override public function set data(value:Object) : void{
			
			//若value为DataGridColumn类型,则此checkbox位置在datagrid的head部分,不要赋值给data
			if(value is DataGridColumn)
			{
				this.selected = false;	
			}
			else
			{
				super.data = value;
			}
			
			initCK(); //初始化
			
			if(dgAssist != null && dgData != null)
			{
				if(dgAssist.isInSelected(dgData))
				{
					this.selected = true;
				}
				else
				{
					this.selected = false;
				}
			}//初始化状态
			
			DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);
		} 
		
		//阻止此控件所在列的headerRelease事件的发送
		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{
			
			if(dgAssist != null && dgData != null)
			{
				if(this.selected == true)
				{
					dgAssist.addToSelected(dgData);
				}
				else
				{
					dgAssist.delFromSelected(dgData);
				}
				
				return;
			}//需要单独存储的情况,数据存储
			else
				if(data != null)
				{
					dispatchEvent(new Event("DgcChange", true));  
					
					return;
				}//绑定数据源的情况,自己处理事件
			
			//---head checkbox---------------------------------------------
			if(dgData == null)
			{  
				DgAssist.selectedAll(DataGrid(listData.owner), this.selected);
				
				return;
			}
			
		}
		
	}
}
 
分享到:
评论

相关推荐

    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编程基础和组件定制能力。...

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

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

    winform DataGridView表头带CheckBox全选

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

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

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

    flex datagrid分页 动态绑定数据源

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

    WPF CheckBox全选、反选比较通用

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

    flex datagrid checkbox实现源码

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

Global site tag (gtag.js) - Google Analytics