具有两个提供程序的高级DataGrid

发布于 2024-08-11 04:12:58 字数 233 浏览 6 评论 0原文

我想为 1 个高级数据网格提供 2 个数据提供程序:1 个普通数据提供程序,第二个数据提供程序用于其中一列中的组合框。我想让这个组合框包含数据库中某一列的数据(我已经在 arrayCollection 中拥有它)。 我只是不知道如何为组合框提供数据,以便不必每次为每个组合框(作为自定义组件)从数据库读取该数据。我应该将 arrayCollection 传递给自定义组件吗?或者在 mxml 中“内联”?最好的办法是什么?

感谢您的帮助

I want to have 2 dataproviders for 1 advancedDataGrid: 1 normal and second one for combobox in a one of columns. I want to have this combobox to have data from a column in database (i already have it in arrayCollection).
I just don't know how to provide data for comboBox in a way that it doesn't have to read that data from database every time for every comboBox (as custom component). Should I pass arrayCollection to custom component? or do it 'inline' in mxml? what's the best way?

thanks for any help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅紫色的梦幻 2024-08-18 04:12:58

最简单的方法是

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

The easiest is to

  • create a static property on your itemrenderer and pass in the data
  • or, lookup the data in the itemrenderer via a global variable
心欲静而疯不止 2024-08-18 04:12:58

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

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

Could you not just set the arrayCollection as a property to the object that is being bound to each row?

One row equals one object with a property containing your arrayCollection which is bound to the comboBox.

浅忆 2024-08-18 04:12:58

我假设 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>

I assume that field_2 in table1 contains a key to a row in table 2.

Set up your datagrid to use table1 as a provider. Make sure the second column use the custom renderer with a combobox

<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>

The renderer is just a canvas with a combobox inside it. The combobox use a copy of the table2 data (just create an array collection and fill it one time with the data from the database) as a provider and use the data from table1 to display the selected item.

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文