您的位置:首页 > 其它

FLEX实践—Datagrid动态创建列TypeError: Error #1010

2009-09-24 14:16 561 查看
在做Datagrid动态创建列的时候遇到了以下的问题:
1)将列的属性从数据库中读取出来
2)通过for循环动态创建DataGridColumn
3)用数据库中读取出来的值设置该DataGridColumn的属性

代码片断如下:
for(var i:Number=0;i<tempArray.length;i++){
var dgColumn:DataGridColumn = new DataGridColumn();
dgColumn = findDataGridColumn(tempArray[i].dataField);
dgColumn.width =tempArray[i].width;
dgColumn.headerText = tempArray[i].headerText;
dgColumn.dataField = tempArray[i].dataField;
templateColumns.push(dgColumn);
}

在运行时当表格列从四列切换成五列时出现如下错误:
TypeError: Error #1010: 术语尚未定义,并且无任何属性。
at mx.controls::DataGrid/http://www.adobe.com/2006/flex/mx/internal::resizeColumn()[C:/autobuild/3.2.0/frameworks/projects/framework/src/mx/controls/DataGrid.as:2827]
at mx.controls.dataGridClasses::DataGridColumn/set width()[C:/autobuild/3.2.0/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridColumn.as:1188]
。。。。。。



通过提示发现错误出现在dgColumn.width =tempArray[i].width;上

原因猜测:
可能是因为表格在从四列切换成五列时需要重新计算每一列的宽度,而在动态创建表格时还未真正生成表格的列就已经对其宽度进行附值,导致找不到对应的属性(以上原因只是个人猜测)

解决方案:
先创建表格,再对其宽度进行附值
将代码改成如下:
for(var i:Number=0;i<tempArray.length;i++){
var dgColumn:DataGridColumn = new DataGridColumn();
dgColumn = findDataGridColumn(tempArray[i].dataField);
//dgColumn.width =tempArray[i].width;
dgColumn.headerText = tempArray[i].headerText;
dgColumn.dataField = tempArray[i].dataField;
templateColumns.push(dgColumn);
}

grid.columns = templateColumns; //grid为表格ID
for(var i:Number=0;i<tempArray.length;i++){
grid.columns[i].width = tempArray[i].width;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: