2010-05-24 64 views
0

我被卡住了。基于同名的XML节点设置DataGridColumn的dataField

鉴于这种XML:

<matrix> 
<row> 
    <column>0.51</column> 
    <column>0.52</column> 
    <column>0.53</column> 
    <column>0.54</column> 
</row> 
<row> 
    <column>0.61</column> 
    <column>0.62</column> 
    <column>0.63</column> 
    <column>0.64</column> 
</row> 

我试图定义一个DataGrid,使得该行节点将代表在DataGrid和列节点的新行会被用来自动填充DataGrid的列。我有一个问题,为每个创建的DataGridColumn对象设置dataField。 DataGrid已创建,但第1行的单元格值均为0.51,第2行为0.61。

我在这里做错了什么?

+0

如果您可以发布DataGrid的代码,它在回答您的问题时会非常有用。 – 2010-05-24 22:43:47

回答

1

我认为这是跳闸您的事情是,你不能定义一个DataGrid(至少在没有很多适应的)这种方式。基本上,DataGrid需要一组对象,它将显示为一组行。

列将作为视图播放dataProvider中给定对象的特定属性。 A DataGridColumn将显示与其dataField属性的值相匹配的属性。

因此,一个快速/脏的例子如下。我遇到了麻烦,使用XML作为某种原因,一个数据源,所以我转换您的数据转换成通用的对象 - 不是我会建议在实际操作中 - 用于解释数据网格如何填充柱的目的:

<mx:Script> 
<![CDATA[ 

    private var data:Array = [ 
         {column0:0.51, column1:0.52, column2:0.53, column3:0.54}, 
         {column0:0.61, column1:0.62, column2:0.63, column3:0.64} 
         ]; 

    private var dataDisplayDP:ArrayCollection = new ArrayCollection(data); 

    private function dataDisplayerCreationListener():void 
    { 
    dataDisplayer.dataProvider = dataDisplayDP; 
    }  

]]>> 
</mx:Script> 

<mx:DataGrid id="dataDisplayer" creationComplete="dataDisplayerCreationListener()"> 
    <mx:DataGridColumn dataField="column0"/> 
    <mx:DataGridColumn dataField="column1"/> 
    <mx:DataGridColumn dataField="column2"/> 
    <mx:DataGridColumn dataField="column3"/> 
</mx:DataGrid> 

所以,再一次的想法是,每一行都表示dataProvider中的一个项目,而每一列表示该行表示的对象的特定属性。起初,这种方法可能看起来很奇怪,但它允许您以表格格式直观地表示数据,而不必以表格格式构造数据。

您可以使用Array对象作为数据源,但通常最好将其包装在ArrayCollection对象中 - 当Collection对象用作数据源时,视图组件将在数据更改时自动更新。

同样,您不限制使用Array或ArrayCollection作为数据源。从Flex documentation on dataProvider

... [dataProvider属性]允许您使用大多数类型的对象作为数据提供者。如果将dataProvider属性设置为数组,则它将转换为ArrayCollection。如果将该属性设置为一个XML对象,它将仅转换为一个XMLListCollection,并且只有一个项目。如果您将该属性设置为XMLList,则它将转换为XMLListCollection。如果将该属性设置为实现IList或ICollectionView接口的对象,则该对象将直接使用。

顺便说一句,我很肯定如果你使用数组或XML对象,你不会得到自动更新视图的利益,即使他们将被转换成一个Collection对象。