如何使AdvancedDataGridRenderProviderer呈现ArrayCollection?

时间:2011-11-23 20:23:03

标签: actionscript-3 flex3

我有一个看起来像这样的对象:

[Bindable]
public class MyRecord implements ValueObject
{

    public var recall_id:int;
    public var recall_type:String;
    public var selected:Boolean = false;
    public var qty:Number;
    public var curr_qty:Number;
    public var due_date:String;
    public var status:String;
    public var comments:String;
    public var groupedTrades:ArrayCollection = new ArrayCollection();
}

我在ArrayCollection中填充了一堆,然后我将它用作AdvancedDataGrid的dataProvider:

<mx:dataProvider>       

                                <mx:HierarchicalData 
                                    source="{model.recalls}"
                                    childrenField="groupedTrades"/>      

                            </mx:dataProvider>

我有一个AdvancedDataGridRenderProvider,我想显示我的'groupstrades':

<mx:rendererProviders>

                                <mx:AdvancedDataGridRendererProvider 
                                    depth="2" 
                                    columnIndex="1" 
                                    renderer="com.controls.GroupedTradesGrid"
                                    columnSpan="0"/>

                            </mx:rendererProviders> 

在这个renderProvider中,我覆盖了set data函数来设置dataProvider:

override public function set data(value:Object):void
        {
            // If using the array data source, use this instead:
            trades_dg.dataProvider = value;
        }

问题是我的renderProvider方法是为它所属的ADG的dataProvider中的每个记录调用的。对于groupsTrades中的每笔交易,这相当于一个全新的DataGrid。

我该如何解决这个问题?我很困惑。

感谢任何有用的提示和感恩节快乐!

更新:我刚从一个正在做我想做的博客中找到了一些硬编码数组; DataGrid作为AdvancedDataGrid的renderProvider。

private var masterData:Array = [
        { OrderId: 10248, CustomerId:"WILMK", EmployeeId:5, OrderDate:"1-Feb-2007", 
        children:[
                [
                    {ProductId:11, ProductName:"Quesbo Cabrales", UnitPrice:14, Quantity:12, Discount:0, Price:168},
                    {ProductId:42, ProductName:"Singaporean Hokkien Fried Mee", UnitPrice:9.8, Quantity:10, Discount:0, Price:98},
                    {ProductId:42, ProductName:"Mozzarella di Giovanni", UnitPrice:34.8, Quantity:5, Discount:0, Price:174}
                ]
                ]}
             ]
         ]}

这是来自此博客:http://techrays.wordpress.com/2008/04/07/advanced-datagrid-as-an-item-renderer-within-an-advanced-datagrid/#comment-1511

当我调试我的集合(召回是我使用的arraycollection),因为它是从服务器返回的,我看到的是这样的:

  

召回[0] - RecallRecord对象    - 道具    - 道具   --croupTrades - 我想用作renderProvider的DP的ArrayCollection   groupedTrades [0] - 通用对象   groupedTrades [1] - 通用对象

我没有看到有效博客的硬编码版本与我在服务中使用的数据之间的区别。我错过了什么?

谢谢你!

1 个答案:

答案 0 :(得分:0)

解决:

事实证明问题是我在服务器响应时将值分配给'groupTrades'。我这样做完全错了:我正在进行直接赋值,而不是将ArrayCollection作为元素添加到'groupedTrades'ArrayCollection中。

我这样做:

for ( var i:int=0;i<result.length;i++ ){
                var item:Object = result[i];

                var recall:RecallRecord       = new RecallRecord();
                recall.counterparty_shortcode = item.counterparty_shortcode;
                recall.comments               = item.comments;
                recall.curr_qty               = item.curr_qty;
                recall.div_percent            = item.div_percent;
                recall.due_date               = df.format( item.due_date );
                recall.qty                    = item.qty;
                recall.rebate_rate            = item.rebate_rate;
                recall.recall_id              = item.recall_id;
                recall.recall_type            = item.recall_type;
                recall.sedol                  = item.sedol;
                recall.status                 = item.status;
                recall.ticker                 = item.ticker;
                recall.groupedTrades          = item.groupedTrades;


                model.recalls.addItem( recall );
            }

而不是:

for ( var i:int=0;i<result.length;i++ ){
                var item:Object = result[i];

                var recall:RecallRecord       = new RecallRecord();
                recall.counterparty_shortcode = item.counterparty_shortcode;
                recall.comments               = item.comments;
                recall.curr_qty               = item.curr_qty;
                recall.div_percent            = item.div_percent;
                recall.due_date               = df.format( item.due_date );
                recall.qty                    = item.qty;
                recall.rebate_rate            = item.rebate_rate;
                recall.recall_id              = item.recall_id;
                recall.recall_type            = item.recall_type;
                recall.sedol                  = item.sedol;
                recall.status                 = item.status;
                recall.ticker                 = item.ticker;

                recall.groupedTrades.addItem( item.groupedTrades );

                model.recalls.addItem( recall );
            }