2012-06-14 68 views
2

我是Flex中的新成员。我想以附加的网格格式显示数据。我发现在DataGrid中显示的最佳方式。但CI列有多个条目,因为其他列会重复。我想避免其他列中的重复数据。附加的截图是excel,我想在Flex中实现相同的格式。我使用Flex 4.5FLEX DataGrid列修改

 My Requirement

回答

2

我看到你想要做什么最好的办法是创造了CLS列自定义项目渲染并将其呈现为一个列表控件。这样,每行中的CLS项目将只占用一行而不是多行。

+1

这是一个良好的通话,数据只需要设置,这样的属性之一对于数据提供者中的数据元素并随后传递给渲染器应包含已被其他列分组以获得列表的CI列表/数组 – shaunhusain

+0

感谢Dom,但我的目标是以附加的快照格式实现。我附上的快照在不包括在内。让我重新说明我的问题。我想显示'姓名','地址','联系人'和'订单'。现在,一个人可以放置N个订单,以便它们将成为多个条目。我想以网格格式显示所有细节,同时我希望避免'姓名','地址','联系人'的重复行。 –

+0

我的例子仍然可以正常工作,但在将数据放入数据网格之前,您需要做更多的工作。从dataProvider中,将第一个元素添加到arrayCollection。然后在dataProvider的后续记录上,检查名称是否已经存在于你的arrayCollection中。如果是这样,只需将它们的顺序添加到您的主arrayCollection内部的orders arrayCollection。这将导致包含人员,他们的地址和联系人的arrayCollection,每个人将有一个arrayCollection和他们的orderNumbers。希望这是有道理的。 – Dom

0

你可以通过下面的代码得到一些想法......你可以使用下面的概念为你的实现建立逻辑。下面的例子是样品根据您的要求无法完成: -

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.core.UIComponent; 
      import mx.events.AdvancedDataGridEvent; 
      import mx.events.ListEvent; 

      [Bindable] 
      private var dpHierarchy:ArrayCollection= new ArrayCollection 
       ([ 
        {name:"Barbara Jennings", address: "Arizona", contact:999970, orders:["1"]}, 
        {name:"Dana Binn", address: "Arizona", contact:9999130, orders:["2"]}, 
        {name:"Joe Smith", address: "California", contact:9992929, orders:["3"]}, 
        {name:"Alice Treu", address: "California", contact:9999230, orders:["4"]} 
       ]);      

      private function addOrder():void 
      { 
       for(var i:int = 0 ; i < dpHierarchy.length; i++) 
       { 
        if(dropDownID.selectedItem.name == dpHierarchy[i].name) 
        { 
         var itemUpdated:Array = dpHierarchy[i].orders; 
         itemUpdated.push(orderNumber.text); 
         dpHierarchy[i].orders = itemUpdated; 
         dpHierarchy.itemUpdated(dpHierarchy[i]); 
         break; 
        } 
       } 
      } 

     ]]> 
    </fx:Script> 
    <mx:VBox x="30" y="30" width="450" height="400"> 
     <s:HGroup> 
      <s:Button label="Add Order" click="addOrder()"/> 
      <s:DropDownList id="dropDownID" dataProvider="{dpHierarchy}" labelField="name" selectedIndex="0"/> 
      <s:TextInput id="orderNumber" width="100"/> 
     </s:HGroup> 
     <mx:AdvancedDataGrid id="myADG" 
          dataProvider="{dpHierarchy}" 
          variableRowHeight="true" wordWrap="true"> 
      <mx:columns> 
       <mx:AdvancedDataGridColumn dataField="name" headerText="Name"/> 
       <mx:AdvancedDataGridColumn dataField="address" headerText="Address"/> 
       <mx:AdvancedDataGridColumn dataField="contact" headerText="Contact"/> 
       <mx:AdvancedDataGridColumn dataField="orders" headerText="Orders" itemRenderer="OrderItemRenderer"/> 

      </mx:columns> 
     </mx:AdvancedDataGrid> 
    </mx:VBox> 
</s:Application> 

项目Reenderer名称: - OrderItemRenderer

<?xml version="1.0" encoding="utf-8"?> 
<s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            focusEnabled="true" width="90%" height="90%"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 

      [Bindable] 
      private var initDG:ArrayCollection = new ArrayCollection(); 

      override public function set data(value:Object):void 
      { 
       super.data = value; 
       initDG = new ArrayCollection(value.orders) 
      } 
     ]]> 
    </fx:Script> 
    <mx:DataGrid id="dataGrid" dataProvider="{initDG}" headerHeight="0" rowCount="{initDG.length}"/> 
</s:MXAdvancedDataGridItemRenderer>