advancedDataGrid有两个提供者

时间:2009-11-12 15:41:04

标签: flex data-binding actionscript flexbuilder mxml

我希望为1个advancedDataGrid提供2个数据提供程序:1个正常,第二个用于一个列中的组合框。我想让这个组合框从数据库中的列中获取数据(我已在arrayCollection中使用它)。 我只是不知道如何为每个comboBox(作为自定义组件)每次都不必从数据库中读取数据时为comboBox提供数据。我应该将arrayCollection传递给自定义组件吗?或者在mxml中“内联”?什么是最好的方式?

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

你能不能将arrayCollection设置为绑定到每一行的对象的属性?

一行等于一个对象,其属性包含绑定到comboBox的arrayCollection。

答案 1 :(得分:0)

最简单的是

  • 在itemrenderer上创建一个静态属性并传入数据
  • 或者,通过全局变量
  • 查找itemrenderer中的数据

答案 2 :(得分:0)

我假设table1中的field_2包含表2中某行的键。

设置datagrid以将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>