【问题标题】:advancedDataGrid with two providers具有两个提供程序的高级数据网格
【发布时间】:2009-11-12 15:41:04
【问题描述】:
我想为 1 个高级数据网格提供 2 个数据提供程序:1 个普通数据提供程序,第二个用于一个列中的组合框。我想让这个组合框从数据库中的列中获取数据(我已经在 arrayCollection 中拥有它)。
我只是不知道如何以不必每次为每个组合框(作为自定义组件)从数据库中读取数据的方式为组合框提供数据。我应该将 arrayCollection 传递给自定义组件吗?还是在 mxml 中“内联”?最好的方法是什么?
感谢您的帮助
【问题讨论】:
标签:
apache-flex
data-binding
actionscript
flexbuilder
mxml
【解决方案1】:
最简单的就是
- 在您的 itemrenderer 上创建一个静态属性并传入数据
- 或者,通过全局变量在 itemrenderer 中查找数据
【解决方案2】:
您能不能只将 arrayCollection 设置为绑定到每一行的对象的属性?
一行等于一个对象,其属性包含绑定到组合框的 arrayCollection。
【解决方案3】:
我假设 table1 中的 field_2 包含表 2 中一行的键。
设置您的数据网格以使用 table1 作为提供者。确保第二列使用带有组合框的自定义渲染器
<mx:AdvancedDataGrid dataProvider="{table1}">
<mx:groupedColumns>
<mx:AdvancedDataGridColumn headerText="Column 1" dataField="field_1" />
<mx:AdvancedDataGridColumn headerText="Column 2" dataField="field_2"
itemRenderer="{CustomRenderer}"/>
</mx:groupedColumns>
</mx:AdvancedDataGrid>
渲染器只是一个画布,里面有一个组合框。组合框使用 table2 数据的副本(只需创建一个数组集合并用数据库中的数据填充一次)作为提供者,并使用 table1 中的数据来显示所选项目。
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" dataChange="dataChange()>
<mx:Script>
<![CDATA[
private function dataChange():void
{
//Update combobox selected index
myCombo.selectedIndex(data);
}
]]>
</mx:Script>
<mx:ComboBox id="myCombo" dataProvider="{table2_copy}"\>
</mx:Canvas>