【发布时间】:2016-09-06 07:09:03
【问题描述】:
我正在尝试在 Flash Builder AS3 代码中(不在标记中)动态创建 DataGrid,但无法获取任何要显示的数据。 以下是我创建网格的方式:
for (var i:int = 0; i < numOfWinners; i++){
if (list[i].Name[0])
dataP.addItem({profilePic: list[i].ProfilePicUrl.toString(), name: list[i].Name.toString(), prizePic: list[i].ItemImageUrl.toString()});
else
dataP.addItem({profilePic: list[i].ProfilePicUrl.toString(), name: list[i].UserName.toString(), prizePic: list[i].ItemImageUrl.toString()});
}
// Create a new DataGridColumn object.
var playerCol:GridColumn = new GridColumn("profilePic");
playerCol.width = 110;
var nameCol:GridColumn = new GridColumn("name");
nameCol.width = 100;
nameCol.itemRendererFunction = MyCustomItemRendererFunction;
var prizePicCol:GridColumn = new GridColumn("prizePic");
prizePicCol.width = 160;
cols.addItem(nameCol);
cols.addItem(playerCol);
cols.addItem(prizePicCol);
grid.columns = cols;
grid.dataProvider = dataP;
private function MyCustomItemRendererFunction(item:Object, column:GridColumn):ClassFactory
{
// Create a Class Factory variable
var myRendererObject:ClassFactory;
// This is the "default" color is nothing else happens
// I'm passing it a pointer to "MyItemRenderer"
myRendererObject = new ClassFactory(ProfilePicRenderer);
if (column.dataField == "profilePic")
{
myRendererObject.properties = { source: item.profilePic};
}
return myRendererObject;
}
我似乎找到的所有示例都在 Flex 4 (MX + Spark) 项目的标记中。
我在这里做错了什么?
谢谢!
【问题讨论】:
-
您能否具体说明“无法显示任何数据”是什么意思?网格和列是否可见?您是否看到您的 itemrenderers 但它们是空的?如果是这样,请发布您的 ProfilePicRenderer 的代码。我已经可以说的是,您应该只覆盖项目渲染器中的 set data() 方法并在那里获取配置文件图片,而不是通过属性进行设置 - 这就是 set data 的用途:)
-
我什么也没看到。只是一片空白。 itemRendererFunction 永远不会被调用。我有一个断点,但它没有被击中。
-
因为我在你的代码中没有看到它,所以我不得不问 - 你确实使用 addChild(grid) 将数据网格添加到舞台,对吧?而且您没有在某些时候将其设置为 visible = false 吗?
-
正确。没有 Flex MX/Spark 的纯 AS 项目似乎不支持此功能
-
但通常有一种方法可以在没有 Flex 的情况下使用数据网格。你见过这个吗? help.adobe.com/en_US/ActionScript/3.0_UsingComponentsAS3/…
标签: actionscript-3 apache-flex datagrid flash-builder4.5