如何根据Flex中的另一行动态填充网格内组合框中的选项?

时间:2009-09-08 17:05:13

标签: flex actionscript datagrid combobox mxml

我正在尝试设置一个包含一列组合框的DataGrid。组合框的值由特定于该行的数据定义。我不能让这个工作起来,我要求解决这个问题,要么修复下面的内容,要么以不同的方式推荐。

我的DataGrid的一列有一个派生自ItemEditor的ComboBox的对象。 itemEditor设置如下:

    <mx:DataGridColumn editorDataField="selectedItem" dataField="type" editable="true" >
        <mx:itemEditor>
            <mx:Component>
            <FilterCell:SelectCellBase initialize="set_combo()" grid="{this}"/>
            </mx:Component>
        </mx:itemEditor>
    </mx:DataGridColumn>

因此,当生成itemEditor时(当用户双击单元格时),将填充数据。

然后,SelectCellBase set_combo()函数定义如下:

            public function set_combo( ) : void 
            {
                var type : String = grid.dataProvider[grid.selectedIndex]['type'];

                if( 'text' == type )
                {
                    this.dataProvider = text;
                }
                else
                {
                    this.dataProvider = number;
                }
            }

这个实现不起作用,因为当我尝试调用grid.selectedIndex时,这似乎总是返回-1。

我做错了什么,或者有什么更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您的问题是,当您在<mx:Component>内时,范围是本地的,并且不再设置为外部MXML文件。所以当你有:

<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{this}"/>
</mx:Component>

您所指的“this”是您定义的内联组件,而不是您正在处理的基本MXML组件。简单的解决方法是将其更改为

<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{outerDocument}"/>
</mx:Component>

当你在<mx:Component>标签内时,会自动设置outerDocument变量,并且可以用来访问父范围内所需的任何内容。