`
bootong
  • 浏览: 11620 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

flex AdvancedDataGrid树级结构方向移动

    博客分类:
  • flex
阅读更多
/*******************************************************************************************

		
 * 控制按钮是否有效

		
 * *****************************************************************************************/

		
public function changeItemButtonEnable(itemId:String,array:ArrayCollection):void{

			
for(var i:int= 0;i
{

				
if(itemId == array[i].id){

					
var epsVoSource:ArrayCollection = ((this.epsModule.dgEpsItems.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;

					
if(i-1 == -1){

						
this.epsModule.btnMoveUp.enabled = false;

						
this.epsModule.btnMoveRight.enabled = false;

						
parentSecondEpsVo = getParentItem(array[i].parentId,epsVoSource);

						
if(parentSecondEpsVo != null){

							
this.epsModule.btnMoveLeft.enabled = true;

						
}else{

							
this.epsModule.btnMoveLeft.enabled = false;

						
}

					
}else{

						
parentSecondEpsVo = getParentItem(array[i].parentId,epsVoSource);

						
if(parentSecondEpsVo != null){

							
this.epsModule.btnMoveLeft.enabled = true;

						
}else{

							
this.epsModule.btnMoveLeft.enabled = false;

						
}

						
this.epsModule.btnMoveUp.enabled = true;

						
this.epsModule.btnMoveRight.enabled = true;

					
}

					


					
if(i+1 == array.length){

						
this.epsModule.btnMoveDown.enabled = false;

						


						
if(i-1 == -1){

							
this.epsModule.btnMoveRight.enabled = false;

						
}else{

							
this.epsModule.btnMoveRight.enabled = true;

						
}

					
}else{

						
this.epsModule.btnMoveDown.enabled = true;

					
}

				
}else if(array[i].children != null && array[i].children.length!=0){

					
changeItemButtonEnable(itemId,array[i].children);

				
}

			
}

		
}

		


		
/************************************************************************************************************/

		
/**条目的上移动**/

		
public function upItem(itemId:String,array:ArrayCollection):void{

			
var selectedEpsVo:EpsVo = this.epsModule.dgEpsItems.selectedItem as EpsVo;

			
var epsVoTemp:EpsVo;

			
var epsVo:EpsVo;

			
for(var i:int = 0;i
if(itemId == array[i].id){

					
var index:int = 0;

					
for(var k:int = 0;k
{

						
if(itemId == array[k].id && k >0)

						
{

							
epsVoTemp = array[k] as EpsVo;

							
array[k] =  array[k-1];

							
array[k-1] = epsVoTemp;

							
index++;

						
}

					
}

					
if(index == 0)

					
{

						
trace("找父Id");

						
var epsVoSource:ArrayCollection = ((this.epsModule.dgEpsItems.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;

						
parentSecondEpsVo = getParentItem(selectedEpsVo.parentId,epsVoSource);

						
if(parentSecondEpsVo != null)

						
{

							
if(parentSecondEpsVo.children != null && parentSecondEpsVo.children.length != 0)

							
{

								
parentSecondEpsVo.children.removeItemAt(0);

							
}

						
}else

						
{

							
Alert.show("你不能将此项目移至最高级别,请重新操作!","操作提示");

							
break; 

						
}

						
parentFirstEpsVo = getParentItem(parentSecondEpsVo.parentId,epsVoSource);

						
if(parentFirstEpsVo != null)

						
{

							
if(parentFirstEpsVo.children != null && parentFirstEpsVo.children.length != 0)

							
{

								
selectedEpsVo.parentId = parentFirstEpsVo.id;

								
parentFirstEpsVo.children.addItemAt(selectedEpsVo,parentFirstEpsVo.children.length);

							
}

						
}

						
else

						
{

							
for(var j:int = 0;j
if(epsVoSource[i].id == parentSecondEpsVo.id)

								
{

									
selectedEpsVo.parentId = epsVoSource[j].parentId;

									
epsVoSource.addItemAt(selectedEpsVo,j+1);

									
break;

								
}

							
}

							


						
}

					
}

				
}else if(array[i].children != null && array[i].children.length!=0){

					
upItem(itemId,array[i].children);

				
}

			
}

		
}

		
/**条目的上移动**/

		
/**条目的下移动**/

		
public function downItem(itemId:String,array:ArrayCollection):void{

			
var selectedEpsVo:EpsVo = this.epsModule.dgEpsItems.selectedItem as EpsVo;

			
var epsVoTemp:EpsVo;

			
var epsVo:EpsVo;

			
for(var i:int = 0;i
if(itemId == array[i].id){

					
var index:int = 0;

					
for(var k:int = 0;k
{

						
if(itemId == array[k].id && k 
{

							
epsVoTemp = array[k+1] as EpsVo;

							
array[k+1] =  array[k];

							
array[k] = epsVoTemp;

							
index++;

							
break;

						
}

					
}

					
if(index != 0)

					
{

						
break;

					
}else

					
{

						
Alert.show("已经是最底层,不能再往下了!","操作提示");

					
}

				
}else if(array[i].children != null && array[i].children.length!=0){

					
downItem(itemId,array[i].children);

				
}

			
}

		
}

		
/**条目的下移动**/

		
/**条目的左移动**/

		
private var parentSecondEpsVo:EpsVo;

		
private var parentFirstEpsVo:EpsVo;

		
public function leftItem(itemId:String,array:ArrayCollection,index:int):void

		
{

			
var indexCount:int = 0;

			
var selectedEpsVo:EpsVo = this.epsModule.dgEpsItems.selectedItem as EpsVo;

			
for(var i:int =0; i
{

				
if(itemId == array[i].id && parentFirstEpsVo == null)

				
{

					
var epsVoSource:ArrayCollection = ((this.epsModule.dgEpsItems.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;

					
if(index == epsVoSource.length)

					
{

						
parentSecondEpsVo = getParentItem(array[i].parentId,epsVoSource);

						
if(parentSecondEpsVo != null){

							
parentSecondEpsVo.children.removeItemAt(i);

						
}else

						
{

							
Alert.show("你不能将此项目移至最高级别,请重新操作!","操作提示");

							
break; 

						
}

						
parentFirstEpsVo = getParentItem(parentSecondEpsVo.parentId,epsVoSource);

						
if(parentFirstEpsVo != null)

						
{

							
for(var k:int = 0;k
{

								
if(parentFirstEpsVo.children[k].id == parentSecondEpsVo.id)

								
{

									
selectedEpsVo.parentId = parentFirstEpsVo.id;

									
parentFirstEpsVo.children.addItemAt(selectedEpsVo,k+1);

									
break;

								
}

							
}

							
break;

						
}

						
else

						
{

							
for(var j:int = 0;j
{

								
if(epsVoSource[j].id == parentSecondEpsVo.id)

								
{

									
selectedEpsVo.parentId = epsVoSource[j].parentId;

									
epsVoSource.addItemAt(selectedEpsVo,j+1);

									
break;

								
}

							
}

							
break;

						
}

					
}

				
}else if(array[i].children != null && array[i].children.length!=0){

					
leftItem(itemId,array[i].children,index);

				
}

			
}

		
}

		


		
/**条目的左移动**/

		
/**条目的右移动**/

		
public function rightItem(itemId:String,array:ArrayCollection):void{

			
var selectedEpsVo:EpsVo = this.epsModule.dgEpsItems.selectedItem as EpsVo;

			
for(var i:int = 0;i
if(itemId == array[i].id)

				
{

					
if(i-1 != -1)

					
{

						
var epsVo:EpsVo = array[i-1] as EpsVo;

						
array.removeItemAt(i);

						
selectedEpsVo.parentId = array[i-1].id;

						
epsVo.children.addItemAt(selectedEpsVo,epsVo.children.length);

						
break;

					
}else

					
{

						
Alert.show(",请重新操作!","操作提示");

						
break; 

					
}

				
}else if(array[i].children != null && array[i].children.length!=0){

					
rightItem(itemId,array[i].children);

				
}

			
}

		
}

		
/**条目的右移动**/

		
public function getParentItem(parentId:String,array:ArrayCollection):EpsVo

		
{

			
var parentEpsVo:EpsVo;

			
for(var i:int = 0;i
if(parentId == array[i].id){

					
parentEpsVo = array[i] as EpsVo;	


					
trace(parentEpsVo.id+"====父ID"+parentId+"====="+array[i].id);

					
return parentEpsVo;

				
}else if(array[i].children != null && array[i].children.length!=0){

					
if(parentEpsVo == null)

					
{

						
parentEpsVo = getParentItem(parentId,array[i].children);

					
}

				
}

			
}

			
return parentEpsVo;

		
}


/********************有待优化,如有朋友了解给点建议******/

/*************优化过的********************************/
/**测试用排序算法**/
		private function sortDataSource(parentId:String, array:ArrayCollection, node:ProjectCodeVO, index:int):void {
			for(var i:int=0; i<array.length; i++) {
				var code:ProjectCodeVO = array[i] as ProjectCodeVO;
				if(code.id == this.moveTargetVO.id) this.moveIndex = ProjectCodeModuleAS.getIndex();
				if(code.parentId+"" == parentId+"") {
					ProjectCodeModuleAS.addIndex();
					//code.sequence = TaskCodeModuleAS.getIndex();
					sortDataSource(code.id, array[i].children as ArrayCollection, code, ProjectCodeModuleAS.getIndex());
				}
			}
		}
		/**静态方法,计算顺序用**/
		public static function addIndex():void {
			index++;
		}
		/**静态方法,计算顺序用**/
		public static function getIndex():int {
			return index;
		}
		/**静态方法,设置顺序初始化值**/
		public static function setIndex(i:int):void {
			index = i;
		}
		
		/**向下移动节点**/
		public function moveDown(event:MouseEvent):void {
			//首先递归找到要交换位置的目标及其兄弟元素
			var proCodeVo:ProjectCodeVO = this.currentWin.dgProCode.selectedItem as ProjectCodeVO;
			var proCodes:ArrayCollection=((this.currentWin.dgProCode.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;
			swapProjectCodeNode(proCodeVo, proCodes, this.projectCodeVoDataSource, "DOWN");
			
		}
		/**向上移动节点**/
		public function moveUp(event:MouseEvent):void {
			//首先递归找到要交换位置的目标及其兄弟元素
			var proCodeVo:ProjectCodeVO = this.currentWin.dgProCode.selectedItem as ProjectCodeVO;
			var proCodes:ArrayCollection=((this.currentWin.dgProCode.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;
			swapProjectCodeNode(proCodeVo, proCodes, this.projectCodeVoDataSource, "UP");
			
		}
		
		/**向左移动节点**/
		public function moveLeft(event:MouseEvent):void {
			//首先递归找到要交换位置的目标及其兄弟元素
			var proCodeVo:ProjectCodeVO = this.currentWin.dgProCode.selectedItem as ProjectCodeVO;
			var proCodes:ArrayCollection=((this.currentWin.dgProCode.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;
			swapProjectCodeNode(proCodeVo, proCodes, this.projectCodeVoDataSource, "LEFT");
			
		}
		
		/**向右移动节点**/
		public function moveRight(event:MouseEvent):void {
			//首先递归找到要交换位置的目标及其兄弟元素
			var proCodeVo:ProjectCodeVO = this.currentWin.dgProCode.selectedItem as ProjectCodeVO;
			var proCodes:ArrayCollection=((this.currentWin.dgProCode.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;
			swapProjectCodeNode(proCodeVo, proCodes, this.projectCodeVoDataSource, "RIGHT");
			
		}
		
		/**递归查找到需要交换位置的元素的兄弟元素,并调换其位置**/
		private function swapProjectCodeNode(targetVO:ProjectCodeVO, datas:ArrayCollection, parentVO:ProjectCodeVO, swapType:String):void {
			try{
				this.moveTargetVO = targetVO;
				for(var i:int = 0; i<datas.length; i++) {
					//Alert.show(targetVO.parentId);
					//非根节点的情形
					if(datas[i].id == targetVO.parentId) {
						for(var j:int=0; j<datas[i].children.length; j++) {
							if(datas[i].children[j].id == targetVO.id) {
								
								if(swapType == "DOWN")
									datas[i].children.addItemAt(targetVO, j+2);
								else if(swapType == "UP")
									datas[i].children.addItemAt(targetVO, j-1);
								else if(swapType == "LEFT") {
									//Alert.show("向左边移动!"+targetVO.parentId+"\n"+parentVO.parentId);
									targetVO.parentId = parentVO.id;
									parentVO.children.addItemAt(targetVO,i+1);
								}
								else if(swapType == "RIGHT") {
									//Alert.show("向右移动!");
									targetVO.parentId = datas[i].children[j-1].id;
									datas[i].children[j-1].children.addItemAt(targetVO,datas[i].children[j-1].children.length);
								}
								
								this.currentWin.dgProCode.expandChildrenOf(targetVO, false);
								this.currentWin.dgProCode.expandChildrenOf(targetVO, true);
								this.currentWin.dgProCode.invalidateList();
								this.currentWin.dgProCode.validateNow();
								
								if(swapType == "DOWN")
									datas[i].children.removeItemAt(j);
								else if(swapType == "UP")
									datas[i].children.removeItemAt(j+1);
								else if(swapType == "LEFT")
									datas[i].children.removeItemAt(j);
								else if(swapType == "RIGHT")
									datas[i].children.removeItemAt(j);
								
								this.currentWin.dgProCode.expandChildrenOf(targetVO, false);
								this.currentWin.dgProCode.expandChildrenOf(targetVO, true);
								this.currentWin.dgProCode.invalidateList();
								this.currentWin.dgProCode.validateNow();
								
								var array:ArrayCollection=((this.currentWin.dgProCode.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;
								ProjectCodeModuleAS.setIndex(0);
								var root:ProjectCodeVO = new ProjectCodeVO();
								sortDataSource(null, array, root,ProjectCodeModuleAS.getIndex());
								
								CairngormEventDispatcher.getInstance().dispatchEvent(new ProjectCodeEvent(ProjectCodeEvent.EVENT_UPDATE_PROJECTCODEDEFINPARENT,this.projectCodeVoDataSource,null,currentWin as ProjectCodeModuleInterface));
								break;
							}
						}
					}else if(targetVO.parentId+"" == "null") {//根节点的情形
						if(datas[i].id == targetVO.id) {
							
							if(swapType == "DOWN")
								this.projectCodeVoDataSource.children.addItemAt(targetVO, i+2);
							else if(swapType == "UP")
								this.projectCodeVoDataSource.children.addItemAt(targetVO, i-1);
							else if(swapType == "RIGHT") {
								targetVO.parentId = this.projectCodeVoDataSource.children[i-1].id;
								this.projectCodeVoDataSource.children[i-1].children.addItemAt(targetVO, this.projectCodeVoDataSource.children[i-1].children.length);
							}
							
							this.currentWin.dgProCode.expandChildrenOf(targetVO, false);
							this.currentWin.dgProCode.expandChildrenOf(targetVO, true);
							this.currentWin.dgProCode.invalidateList();
							this.currentWin.dgProCode.validateNow();
							
							if(swapType == "DOWN")
								this.projectCodeVoDataSource.children.removeItemAt(i);
							else if(swapType == "UP")
								this.projectCodeVoDataSource.children.removeItemAt(i+1);
							else if(swapType == "RIGHT") {
								this.projectCodeVoDataSource.children.removeItemAt(i);
							}
							
							this.currentWin.dgProCode.expandChildrenOf(targetVO, false);
							this.currentWin.dgProCode.expandChildrenOf(targetVO, true);
							this.currentWin.dgProCode.invalidateList();
							this.currentWin.dgProCode.validateNow();
							
							var array:ArrayCollection=((this.currentWin.dgProCode.dataProvider as HierarchicalCollectionView).source as HierarchicalData).source as ArrayCollection;
							ProjectCodeModuleAS.setIndex(0);
							var root:ProjectCodeVO = new ProjectCodeVO();
							sortDataSource(null, array, root,ProjectCodeModuleAS.getIndex());
							
							CairngormEventDispatcher.getInstance().dispatchEvent(new ProjectCodeEvent(ProjectCodeEvent.EVENT_UPDATE_PROJECTCODEDEFINPARENT,this.projectCodeVoDataSource,null,currentWin as ProjectCodeModuleInterface));
							break;
						}
					}else {
						swapProjectCodeNode(targetVO, datas[i].children, datas[i], swapType);
					}
				}
				//this.taskCodeModule.dgTaskCode.selectedItem = targetVO;
			}catch(error:Error) {
				
			}
		}
分享到:
评论

相关推荐

    Flex应用AdvancedDataGrid表头皮肤

    在Flex开发中,AdvancedDataGrid组件是用于展示大量复杂数据的高级网格控件。它提供了比基本DataGrid更丰富的功能,如多级表头、排序、分组、过滤和自定义渲染等。本文将深入探讨Flex应用中的AdvancedDataGrid表头...

    flex advancedDataGrid 中如何实现带checkbox的树

    综上所述,实现Flex AdvancedDataGrid中带复选框的树形结构涉及数据模型的设计、HierarchicalData的使用、AdvancedDataGrid的配置以及事件处理等多个方面。通过灵活应用这些技术,我们可以创建出功能强大且易于操作...

    FLEX AdvancedDataGrid 复选框

    在IT行业中,AdvancedDataGrid是Flex(Adobe Flex)框架中一个强大的数据网格组件,用于显示大量结构化的数据。它提供了高级的数据呈现功能,比如分组、排序、过滤和自定义渲染。本文将深入探讨“FLEX ...

    Flex技术中AdvancedDataGrid使用方法

    ### Flex技术中AdvancedDataGrid使用方法 #### 一、多列排序 在默认情况下,`AdvancedDataGrid`组件会按照数据被添加至其`DataProvider`的顺序来展示数据。与`DataGrid`组件类似,`AdvancedDataGrid`也支持用户在...

    flex AdvancedDataGrid实现checkBox全选功能

    在Flex开发中,AdvancedDataGrid是一款强大的数据网格组件,它提供了丰富的数据展示和交互功能,如排序、分组、过滤等。在实际应用中,我们经常需要为用户提供选择多条数据的能力,这时CheckBox的选择功能就显得尤为...

    flex 使用AdvancedDataGrid组件的课件管理系统

    在Flex开发环境中,AdvancedDataGrid组件是一个强大的数据展示工具,尤其适用于处理大量复杂数据的网格显示。本课件管理系统就是基于这个组件构建的,旨在提供一个基础的平台,用于管理和浏览课件信息。下面将详细...

    flex-datagrid-advancedDataGrid-demo

    在Flex编程领域,数据网格(DataGrid)是用于展示大量结构化数据的组件,而AdvancedDataGrid则是DataGrid的一个增强版,提供了更为丰富的功能和更高级的定制能力。本示例"flex-datagrid-advancedDataGrid-demo"显然...

    AdvancedDataGrid综合应用

    AdvancedDataGrid支持树形结构数据,可以显示嵌套的数据集,这对于展示层次关系复杂的数据非常有用。通过使用GroupingField和DataGroup对象,我们可以将数据按照特定字段进行分组。 3. **多列排序** 与DataGrid...

    AdvancedDataGrid 动态添加节点 控制树

    在Flex开发中,AdvancedDataGrid是一个强大的组件,用于展示大量数据并进行复杂的数据操作,如分组、排序和过滤。这个组件特别适用于构建数据密集型的用户界面,尤其是在需要显示层次结构数据时。本篇文章将深入探讨...

    felx AdvancedDataGrid 多选框 单选框

    非常好用的 felx AdvancedDataGrid 多选框 单选框支持渲染器,不需改到AdvancedDataGrid 代码; 支持 xml 数据源的网上可查到一些, 但这个可是 支持 Array 类型数据源的。

    AdvancedDataGrid多表头与树形表格(数据统计)

    在本文中,我们将深入探讨Adobe Flex中的AdvancedDataGrid组件,特别是在实现多表头和树形表格方面的应用,这对于数据统计和展示来说是非常重要的工具。AdvancedDataGrid是Flex中一个功能强大的组件,它允许用户以...

    flex导出excel的代码

    &lt;![CDATA[ import mx.controls.CheckBox; import mx.controls.Alert; import com.as3xls.xls.ExcelFile;... Alert.show("行的数据分别是:"+o.idx+"/"+o.names+"/"+o.sex);...&lt;/mx:WindowedApplication&gt;

    flex css设计器

    Flex CSS设计器是一款基于Flash技术的工具,专门用于帮助开发者对Flex应用程序中的用户界面控件进行CSS样式设计。这款工具提供了一个可视化的环境,使得设计师和开发者能够更直观、便捷地调整Flex控件的外观和布局,...

    AdvancedDataGrid datavisualization.swc

    flex datavisualization.swc flex 3 AdvancedDataGrid

    Flex 全选效果 批量删除

    在Flex编程中,AdvancedDataGrid和DataGrid是两种常用的组件,用于展示数据并提供交互功能。本示例项目“Flex全选效果批量删除”聚焦于如何实现这些组件的一个实用功能,即用户可以通过全选复选框来一次性选择多个...

    Flex中AdvancedDataGrid的用法示例介绍

    在Flex开发中,AdvancedDataGrid组件是一个常用的显示表格数据的组件,其功能比基础的DataGrid组件更为强大,支持更加复杂的数据显示需求,例如显示多层表头、支持拖拽排序等。在某些情况下,当需要展示具有复杂数据...

    AdvancedDataGrid或datagrid导出到excel.rar

    AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar

    最新的AdvancedDataGrid行嵌套AdvancedDataGrid实现

    最新的AdvancedDataGrid行嵌套AdvancedDataGrid实现,该例子只是实现AdvancedDataGrid利用AdvancedDataGridRendererProvider在行中渲染另外一个AdvancedDataGrid,当然也可以渲染其它任何想渲染的界面或者组件,价值...

    SparkTree_AdvancedDataGrid

    SparkTree_AdvancedDataGrid是基于Adobe Flex SDK 4.5的一个高级组件,它在Flex应用中提供了强大的树形数据展示功能。Flex是一个用于创建富互联网应用程序(RIA)的开放源代码框架,广泛应用于Web开发,特别适合构建...

    Flex详细文档.pdf

    - **简单动画效果**: Flex支持多种动画效果,如淡入淡出、移动等,这些可以通过ActionScript脚本来实现。 #### 四、Flex for GIS开发 - **新建项目**: 创建一个新的Flex项目,专门针对GIS应用开发。 - **使用地图*...

Global site tag (gtag.js) - Google Analytics