2011-11-23 35 views
0

我有一個對象,看起來像這樣:如何使AdvancedDataGridRenderProviderer呈現ArrayCollection?

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

<mx:dataProvider>  

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

          </mx:dataProvider> 

我有一個AdvancedDataGridRenderProvider我想要顯示我的'分組貿易':

<mx:rendererProviders> 

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

          </mx:rendererProviders> 

在這個renderProvider中,我重寫set data函數來設置t他的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每個記錄它的一部分。這相當於分組交易中每筆交易的全新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對象 - 丙 - 丙 - groupedTrades - ArrayCollection的,我想作爲DP用於renderProvider groupedTrades [0] - 通用對象 groupedTrades [1] - 通用對象

我無法看到硬編碼版本與博客的作品和我使用的服務之間的差異。我錯過了什麼?

謝謝!

+0

它只是似乎很奇怪,如果我硬編碼我的分層數據一切正常就好了,但是當我切換到使用數組對象的集合它根本不起作用。有什麼不同?我寫'MyRecord'對象的方式是否沒有正確顯示分層數據結構? – fumeng

+0

我是否需要創建自定義數據描述符? – fumeng

回答

0

解決:

事實證明,問題是我如何分配值「groupedTrades」當服務器響應。我這樣做是完全錯誤的:我正在做一個直接分配,而不是將ArrayCollection作爲元素添加到'grouppedTrades'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); 
      }