DataGrid单元格定位

       在Flex项目开发中,相信很多人会用到DataGrid,但是我个人感觉DataGrid控件相比Excel,在定位单元格上比较麻烦。因为在DataGrid控件中是以列DataGridColumn作为划分的,换句话也就是列优先,而其数据组织中的dataProvider属性一般是ArrayCollection,Array,Ilist,ListCollectionView,ICollectionView,XMLList作为数据源的,其中用的最多的就是ArrayCollection和Array,这样在定位获取单元格数据或者赋值单元格数据的时候可以结合dataProvider的行索引和DataGrid的DataColumns中的DataGridColumn列索引实现DataGrid的单元格定位了。但是前提是DataGrid的dataProvider属性是ArrayCollection或者Array类型,且不为。

    下文中是将一个集成自ArraCollection类型的对象的数据赋值到DataGrid中的某一行,其中代码中就涉及到了以上所讲的单元格定位:

		/** 将指定的DataGrid中的某一行数据赋值到指定的EconomicItems
		 *  @author 陈文锋  [email protected]
		 *  @param dg:DataGrid--数据源DataGrid
		 *  @param eis:EconomicItems--数据目标EconomicItems
		 *  @param fromyear:int--EconomicItems中的起始年份
		 *  @param toyear:int--EconomicItems中的截止年份
		 *  @param fromColumn:int--要复制的DataGrid中起始列序号,默认值为0
		 *  @param rowindex:int--要复制的DataGrid的行序号,默认值为0
		 *  @return void
		 * */	
		public static function RowToEconomicItems(dg:DataGrid,eis:EconomicItems,fromyear:int,toyear:int,fromColumn:int=0,rowindex:int=0):void
		{   
			var columnname:String;
			if((fromyear<=toyear)&&(dg!=null)&&(eis!=null)&&(rowindex>0&&rowindex<dg.rowCount))
				for(var i:int=0;i<toyear-fromyear+1;i++)
				{   
					//循环获取行中所在列的列名,即dataField
					columnname=((dg.columns[i]) as DataGridColumn).dataField;
					//循环设置EconomicItems中每项的data属性为DG中dataprovider数据rowindex行的columnname值(似乎此处代码限制了DataGrid的dataprovider类型为ArrayCollection或者Array)
					if(dg.dataProvider is ArrayCollection)
					eis.getItemAt(i).data=((dg.dataProvider as ArrayCollection)[rowindex] as Object)[columnname];
					else 
					{
					if(dg.dataProvider is Array)
					eis.getItemAt(i).data=((dg.dataProvider as Array)[rowindex] as Object)[columnname];
					else
						return;
					}
				}
			else 
				return;
		}

 

你可能感兴趣的:(Excel,Flex)