2011-03-10 81 views
0

如何在單個列中顯示來自兩個不同元素的數據?或者如果有方法來組合兩列?如何顯示一列中兩個不同元素的數據?

像下面的例子一樣firstName顯示出來。我怎樣才能在同一列顯示lastName呢?

Folloing是XML文件 '這不能改變':

<userEmail> 
<user firstName="john" lastName="seena" /> 
<user firstName="pinku" lastName="phil"/> 
</userEmail> 

代碼:

monitoringArray = event.result.userEmail.user; 
. 
. 
. 
<mx:DataGrid id="monDataGrid" x="10" y="10" dataProvider="{monitoringArray}"> 
<mx:columns> 
    <mx:DataGridColumn width="150" headerText="User Name" dataField="firstName" 
</mx:columns> 
</mx:DataGrid> 

回答

2

它可以通過使用DatagridColumn的labelFunction屬性來完成。

粗糙例如:

<?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[ 

      private var xml:XML = <userEmail> 
            <user firstName="john" lastName="seena" /> 
            <user firstName="pinku" lastName="phil"/> 
            </userEmail> 

      private function getCombinedUserNameLabel(item:Object, col:DataGridColumn):String 
      { 
       return [email protected] + " " + [email protected]; 
      } 
     ]]> 
    </fx:Script> 

    <mx:DataGrid id="monDataGrid" x="10" y="10" dataProvider="{xml.user}"> 
     <mx:columns> 
      <mx:DataGridColumn width="150" headerText="User Name" labelFunction="{getCombinedUserNameLabel}"/> 
     </mx:columns> 
    </mx:DataGrid> 

編輯:數組也應該不是一個問題:

<?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" 
       creationComplete="application1_creationCompleteHandler(event)" 
       > 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 


    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      private var xml:XML = <userEmail> 
            <user firstName="john" lastName="seena" /> 
            <user firstName="pinku" lastName="phil"/> 
            </userEmail>; 

      private var monitoringArray:Array = [{firstName:"john", lastName:"seena"}, {firstName:"pinku", lastName:"phil"}]; 

      private function getCombinedUserNameLabel(item:Object, col:DataGridColumn):String 
      { 
       return [email protected] + " " + [email protected]; 
      } 

      private function getCombinedUserNameLabel2(item:Object, col:DataGridColumn):String 
      { 
       return item.firstName + " " + item.lastName; 
      }   

      protected function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       // TODO Auto-generated method stub 
      } 

     ]]> 
    </fx:Script> 

    <s:VGroup> 
     <mx:DataGrid id="monDataGrid" x="10" y="10" dataProvider="{xml.user}"> 
      <mx:columns> 
       <mx:DataGridColumn width="150" headerText="User Name" labelFunction="{getCombinedUserNameLabel}"/> 
      </mx:columns> 
     </mx:DataGrid> 

     <mx:DataGrid id="monDataGrid2" x="10" y="10" dataProvider="{monitoringArray}"> 
      <mx:columns> 
       <mx:DataGridColumn width="150" headerText="User Name" labelFunction="{getCombinedUserNameLabel2}"/> 
      </mx:columns> 
     </mx:DataGrid>  

    </s:VGroup> 

</s:Application> 
+0

太好了。如果您使用xml:XML,但不適用於我正在使用的數組,例如monitoringArray,則可以正常工作。 – baltoro 2011-03-10 14:14:08

+0

如果它能夠工作並按照您的要求做,請不要忘記接受答案,這樣其他人就可以節省時間。你有沒有用數組粘貼? – 2011-03-10 14:17:56

+0

問題是使它與Array一起工作。所以我會接受它,一旦我得到它與陣列的工作。別擔心。 :) tyo stick是指什麼?谷歌搜索,但無法找到任何東西。 – baltoro 2011-03-10 15:00:45

0

我猜它不能在不改變XML文件來完成。 datafield屬性只能使用一個字符串。 以下是adobe參考網站的定義。

dataField : String 
    The name of the field or property in the data provider item 
    associated with the column. 
+0

非常感謝Anji的幫助。在上面檢查David的回答。這是可能的。 :) – baltoro 2011-03-10 18:19:50

0

在DataGrid的複雜欄能夠與項目渲染器來實現。您可以在adobe的tour de flex應用程序中看到示例。 Tour De Flex

相關問題