2011-11-23 68 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); 
      }