在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 陈文锋 54cwf@163.com
* @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;
}
本文介绍如何在Flex项目的DataGrid控件中进行单元格定位,并提供了一个具体的示例方法,该方法用于将DataGrid中的某一行数据复制到自定义对象中。
3万+

被折叠的 条评论
为什么被折叠?



