2011-12-28 65 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