【问题标题】:How can I make AdvancedDataGridRenderProviderer render an ArrayCollection?如何让 AdvancedDataGridRenderProviderer 呈现 ArrayCollection?
【发布时间】:2012-01-05 02:54:49
【问题描述】:

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

[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,我想显示我的“groupedtrades”:

<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 中的每条记录调用的。这相当于 groupedTrades 中每笔交易的全新 DataGrid。

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

感谢您提供任何有用的提示,感恩节快乐!

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

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

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

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

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

谢谢!

【问题讨论】:

  • 这似乎很奇怪,如果我对分层数据进行硬编码,一切都会正常工作,但是当我切换到使用对象的数组集合时,它根本就不起作用。有什么区别?我编写“MyRecord”对象的方式是否没有正确显示分层数据结构?
  • 我需要创建自定义数据描述符吗?

标签: actionscript-3 flex3


【解决方案1】:

已解决:

事实证明,问题在于我如何在服务器响应时将值分配给“groupedTrades”。我做错了:我做的是直接分配,而不是将 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 );
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多