2011-12-28 84 views
0

傢伙,我得到了已被定義爲動態添加DataGrid中

<mx:DataGridColumn headerText="Role" id="roleAdmin" headerStyleName="myHeaderStyles"> 
     <mx:itemRenderer> 
       <fx:Component> 
         <mx:VBox> 
           <mx:Text width="100%" text="{(data.role == 0)? 'Super Admin':((data.role == 1)? 'Admin': ((data.role == 2)? 'Regular User': 'Unknown'))}"/> 
         </mx:VBox> 
       </fx:Component> 
     </mx:itemRenderer> 
</mx:DataGridColumn> 

所有我想要做的是一個dataColumn的DataColumn中,創建此數據動態地根據條件我placed.Anyone可以幫助我的代碼我應該做什麼以及如何添加所有這些東西。

最好的問候

+0

有什麼不對本的labelFunction

首先,寫出如下標籤功能?該代碼似乎 – 2011-12-28 06:46:13

回答

5

試試這個。您將獲得邏輯如何使用項目渲染器處理動態列。

var cols:Array=new Array(); 
cols = dgDatagrid.columns; 
var column:DataGridColumn = new DataGridColumn(); 
column.headerText = "Role"; 
column.width=170; 
column.dataField="role"; 
column.setStyle('headerStyleName',myHeaderStyles); 
column.itemRenderer = new ClassFactory(MyRenderer); 
cols.push(column); 
dgDatagrid.columns=cols; 

MyRenderer:

<?xml version="1.0" encoding="utf-8"?> 
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" 
     > 

    <s:layout> 
     <s:HorizontalLayout paddingLeft="10" paddingRight="10" /> 
    </s:layout> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
    import mx.controls.DataGrid; 
      import mx.controls.dataGridClasses.DataGridListData; 
      import mx.events.FlexEvent; 

      import spark.events.TextOperationEvent; 

      private var dg:DataGrid; 
      private var dglistData:DataGridListData; 


      override public function set data(value:Object) : void 
      { 
       super.data = value; 
       if(value){ 
        dglistData = listData as DataGridListData; 
        if(value[dglistData.dataField]){ 
txtText.text=((value[dglistData.dataField]) == 0)? 'Super Admin':(((value[dglistData.dataField]) == 1)? 'Admin': (((value[dglistData.dataField]) == 2)? 'Regular User': 'Unknown')) 

         } 
              } 
      } 
]]> 
</fx:Script> 

<mx:VBox> 
<mx:Text width="100%" id="txtText"/> 
</mx:VBox> 
</s:MXDataGridItemRenderer> 
+0

我已經有一個數據網格創建好起來,但我只是想使這個最後一列動態添加:) – 2011-12-29 03:07:39

+0

column.setStyle(「headerStyleName」,myHeaderStyles); column.itemRenderer = new ClassFactory(MyRenderer);是給人錯誤,他們不承認myHeaderStyle和MyRenderer所以我改變myHeaderStyle爲「大膽的」,但現在的問題是如何創建的itemRenderer,然後將一個VBOX和文本框將顯示的數據字段項 – 2011-12-30 04:48:29

+0

column.labelFunction =「roleLabelFunction」給出錯誤 1067:將類型爲String的值隱式強制爲不相關的類型函數。 – 2011-12-30 04:52:37

1

你並不需要一個定義ItemRenderer的。這是使用labelFunction的典型例子。

private function roleLabelFunction(data:Object, column:DataGridColumn):String { 
    switch(data.role) { 
     case 0: return 'Super Admin'; 
     case 1: return 'Admin'; 
     case 2: return 'Regular User'; 
     default: return 'Unknown'; 
    } 
    //Some flex compilers show a compiler error if there is no return in the main function body, so this is the same as the default case 
    return 'Unknown'; 
} 

然後用這個作爲你的DataGridColumn

<mx:DataGridColumn headerText="Role" id="roleAdmin" headerStyleName="myHeaderStyles" labelFunction="roleLabelFunction"> 
+0

+1尼斯解釋ñ例子(我dint正確地得到問題)。 – 2011-12-28 07:08:28

+0

恩,M.S.Nayak是正確的。我有一個數據網格有6列,這一列是最後一個。我希望一些用戶能夠以超級管理員身份顯示此列,但不會顯示給其他人。 – 2011-12-29 02:58:38

+0

什麼?這不是你在你的問題中所做的。如果你想得到一個合適的解決方案,你將不得不詳細說明。也許一個草圖或截圖會做.. – 2011-12-30 05:31:06