Apache flex 找不到datagrid

Apache flex 找不到datagrid,apache-flex,actionscript,Apache Flex,Actionscript,我创建了每个要添加到NavigatorComponent()的datagrid,但是,如何通过ID检索datagrid,以便将ArrayCollection指向datagrid的dataprovider private var pdg:String; private function stabAdd():void { var dg1:DataGrid = new DataGrid(); var cn:NavigatorCon

我创建了每个要添加到NavigatorComponent()的datagrid,但是,如何通过ID检索datagrid,以便将ArrayCollection指向datagrid的dataprovider

private var pdg:String;
    private function stabAdd():void {
                var dg1:DataGrid = new DataGrid();
                var cn:NavigatorContent = new NavigatorContent(); 
                stab.addElement(cn);
                cn.name = "nc"+nu;
                dg1.id = "nc"+nu;
                pdg = dg1.id;
                dg1.addEventListener(MouseEvent.CLICK,cc);
                nu++;
这将抛出一个无法找到pdg的错误,我想知道为什么:

trace(DataGrid(pdg));
nu++的目的是分配一个 每个节点的唯一名称(dg1、dg2等) 数据网格,以便我可以将AC分配给 数据网格的数据提供者

我可以尊重给每个组件一个唯一名称的需要。在ActionScript中执行此操作的适当方法不是指定组件的id/name字段,而是创建组件的实例作为变量。大概是这样的:

protected var myGrid : DataGrid;
loop
 var newGrid : DataGrid = new DataGrid()
 myGridArray.push(newGrid);
end loop
现在,您可以在组件中的任何位置或其子组件中访问myGrid,而无需创建复杂的方案。如果需要多个DataGrid,可以将它们存储在一个阵列中:

protected var myGridArray : Array = new Array();
在代码后面的某个地方--可能是createChildren()执行以下操作:

protected var myGrid : DataGrid;
loop
 var newGrid : DataGrid = new DataGrid()
 myGridArray.push(newGrid);
end loop
在大多数情况下,这是所有基于Flex列表的组件如何使用ItemRenders来实现的。它们有一组可见的渲染器

正如@J_A_X_注释中所述,您正在尝试将pdg(字符串)转换为数据网格。我希望它返回一个空值,因为Flex强制转换往往会悄悄地失败


如果需要更多帮助,您必须告诉我们您收到的明确错误,可能是行号和更多代码。

为什么要尝试动态地为组件提供ID(或名称)?那有什么用呢?trace语句相对于代码的其余部分显示在哪里?什么时候调用该方法?stab变量到底是什么?您使用的是Spark DataGrid还是MX DataGrid?您使用的是哪个版本的FlexSDK?如果不在循环中,nu++有什么用途?pdg是一个字符串,您试图将其转换为DataGrid。错误。其中,有很多糟糕的编码实践,其中大部分都是Flextras已经提到的。我明白了,那么你建议对一个数据网格使用多个AC吗?我正在使用tabnavigator,它将在每个navigator内容中包含datagrid。Flex4和使用mx:datagrid。nu++的目的是为每个datagrid分配一个唯一的名称(dg1、dg2等),以便我可以将AC分配给该datagrid的dataprovider