【问题标题】:How to bind flex ArrayCollection's data in column of AdvancedDataGrid如何在 AdvancedDataGrid 的列中绑定 flex ArrayCollection 的数据
【发布时间】:2014-03-20 00:05:45
【问题描述】:

我想在 AdvancedDataGrid 中显示对象的一些属性。我怎样才能做到这一点?我想声明 DataGridColumn 并将其绑定到对象的相应属性。我有一个 ArrayCollection,其中包含许多 resolutionVO 类型的对象。

如果我不声明列并将该 arrayCollection 提供给 DataGrid 的 dataProvider,那么它会显示所有列,但我不想要所有列。

当我声明列并将 dataField 绑定到该对象的相应属性时,DataGrid 将显示空数据。请帮助我如何绑定它?

下面是我的数据网格:

<mx:AdvancedDataGrid id="resolutionDG" x="10" y="85" width="1153" height="300" 
    dataProvider="{filteredResolutionReport}" columnWidth="600"  color="black">
    <mx:columns > 
        <mx:AdvancedDataGridColumn width="200" headerText="Incident ID" 
            dataField="{((reportVO.resolutionReport as ArrayCollection).getItemAt(0) as ResolutionVO).incidentId}" editable="false" />            
        <mx:AdvancedDataGridColumn width="200" headerText="Priority" 
            dataField="{((reportVO.resolutionReport as ArrayCollection).getItemAt(0) as ResolutionVO).priority}" editable="true" />
        <mx:AdvancedDataGridColumn width="200" headerText="SLM Status" 
            dataField="{((reportVO.resolutionReport as ArrayCollection).getItemAt(0) as ResolutionVO).SLMstatus}" />
        <mx:AdvancedDataGridColumn width="200" headerText="Submit Date" 
            dataField="{((reportVO.resolutionReport as ArrayCollection).getItemAt(0) as ResolutionVO).submitDate}" />
        <mx:AdvancedDataGridColumn width="200" headerText="Incident Resolved Date" 
            dataField="{((reportVO.resolutionReport as ArrayCollection).getItemAt(0) as ResolutionVO).incidentResolvedDate}" />
    </mx:columns>
</mx:AdvancedDataGrid>

而actionScript部分是:

[Bindable]
public var reportVO:ReportVO;

[Bindable]
public var resolutionReport:ArrayCollection;

[Bindable]
public var resolutionVO:ResolutionVO;

[Bindable]
public var filteredResolutionReport:ArrayCollection;

public function resultHandler(event:ResultEvent):void
{
    resolutionReport=reportVO.resolutionReport;//
    filteredResolutionReport=reportVO.resolutionReport;
}

类是:

1)ReportVO.as

[Bindable]
[RemoteClass(alias="com.adobe.sla.valueObject.ReportVO")]
public class ReportVO
{
    private var _resolutionReport:ArrayCollection;
    private var _responseReport:ArrayCollection;
    public function ReportVO()
    {
    }

    public function get responseReport():ArrayCollection
    {
        return _responseReport;
    }

    public function set responseReport(value:ArrayCollection):void
    {
        _responseReport = value;
    }

    public function get resolutionReport():ArrayCollection
    {
        return _resolutionReport;
    }

    public function set resolutionReport(value:ArrayCollection):void
    {
        _resolutionReport = value;
    }

}

2)分辨率VO.as

[Bindable]
   [RemoteClass(alias="com.adobe.sla.valueObject.ResolutionVO")]
public class ResolutionVO
{
    private var _assignedGroup:String;
    private var _incidentId:String;
    private var _priority:String;
    private var _SLMstatus:String;


    public function ResolutionVO()
    {
    }public function get SLMstatus():String
    {
        return _SLMstatus;
    }

    public function set SLMstatus(value:String):void
    {
        _SLMstatus = value;
    }

    public function get priority():String
    {
        return _priority;
    }

    public function set priority(value:String):void
    {
        _priority = value;
    }

    public function get incidentId():String
    {
        return _incidentId;
    }

    public function set incidentId(value:String):void
    {
        _incidentId = value;
    }

    public function get assignedGroup():String
    {
        return _assignedGroup;
    }

    public function set assignedGroup(value:String):void
    {
        _assignedGroup = value;
    }

}

【问题讨论】:

  • 你能提供你的数据网格和数据的示例代码吗?
  • 我的问题是如何绑定各个字段?
  • 应用程序中的数据是否发生变化?您正在尝试链接您的类集合的项目内的字段。您当然可以完成这项工作(如果您有兴趣,我可以向您展示如何操作),但是如果集合中包含的数据发生更改,数据绑定将中断(您必须手动完成)。数据字段在 DataGridColumn 中本机不支持“路径”评估。
  • 没有数据不变。
  • 我只想知道如何向 dataField 提供数据。谢谢..

标签: apache-flex blazeds arraycollection


【解决方案1】:

您可以在 ReportVO 类中定义一个“虚拟”字段,该字段执行您的绑定描述的操作:

public function get virtualField():String {
     return ResolutionVO(this.resolutionReport.getItemAt(0)).SLMstatus;
}

然后你将它绑定到你的 DatagridColumn 中:

<mx:AdvancedDataGridColumn width="200" headerText="Incident ID" dataField="virtualField" editable="false"/>

【讨论】:

  • 谢谢zenbeni。我会实施它并让你知道。
  • @rajusharma 在实例化 DataGrid 之前,您的集合是否为空?
  • 是的。但我认为当数据来自远程对象的方法调用时,它应该显示出来,当我没有声明任何列时会发生这种情况。我的假设可能是错误的。请建议。
  • @rajusharma 仅当它们的 resolutionReport 集合具有项目时,您才应将项目添加到数据提供者,如果没有,则由于未路由数据绑定,因此显示第一个评估(无值)。
【解决方案2】:

您好,您可以将您的数组集合声明为数据提供者,它将不断更新。

中将ArrayCollection注解为[Bindable]

[可绑定] ArrayCollection 网格数据;

<mx:AdvancedDataGrid dataprovider={gridData}>
<mx:columns>
<mx:AdvancedDataGridColumn dataField="Album"/>
<mx:AdvancedDataGridColumn dataField="Price"/>
</mx:columns>
</mx:AdvancedDataGrid>

锄头有用

【讨论】: