2015-05-08 53 views
0

AdvancedDataGrid不允许我使用列级别的itemrenderizer或样式函数,我应该在每行的特定条件下填充列的背景颜色。如何根据条件对advanceddatagrid列背景进行着色?

我尝试了风格的功能,它改变了文本颜色,但不是单元格的背景颜色>我没有关于如何使用itemrender来覆盖ADG属性的想法。

请帮助我,我尝试了所有可能的方式,这是我最后的希望得到一些解决方案 我的代码:

 <mx:AdvancedDataGridColumnGroup headerText="Time Frame">  
      <mx:AdvancedDataGridColumn dataField="region" headerText="Region"/> 
      <mx:AdvancedDataGridColumn dataField="cat1" headerText="Cat 1"/> 
      <mx:AdvancedDataGridColumn dataField="cat2" headerText="Cat 2"/> 
     </mx:AdvancedDataGridColumnGroup> 
      <mx:AdvancedDataGridColumn id="levelfield" dataField="level" headerText="level" styleFunction="myColStyleFunc" /> 
     <mx:AdvancedDataGridColumnGroup headerText="Role">  
      <mx:AdvancedDataGridColumn dataField="operation" headerText="Operation" /> 
     </mx:AdvancedDataGridColumnGroup> 

功能

public function myColStyleFunc(data:Object, col:AdvancedDataGridColumn):Object 
{ 
    if(data["level"]== 'Level 1'){ 
     return {backgroundColor:0x00FF00}; 
} 
+0

你想要的颜色特定列的所有单元格? –

+0

也发布一些可以编译的代码。 –

+0

是的,特别是我想显示基于值和空值的RAG状态原始颜色 –

回答

0

您可能需要编写自己的项目渲染器覆盖set data方法fo如下所示。该类的名称是ColoredHeaderRenderer。

<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" xmlns:local="*"> 
    <fx:Script> 
     <![CDATA[ 

      override public function set data(value:Object):void { 
        if(value.Actual == 29134) { 
         lblData.getTxt().background = true; 
         lblData.getTxt().backgroundColor = '0xFFFF00'; 
        } else if(value.Actual == 38865) { 
         lblData.getTxt().background = true; 
         lblData.getTxt().backgroundColor = '0xFF0000'; 
        } 
        super.data=value; 
      } 
     ]]> 
    </fx:Script> 
    <local:CustomLabel id="lblData" top="0" left="0" right="0" bottom="0" text="{listData.label}"/> 
</s:MXAdvancedDataGridItemRenderer> 

我曾与下面的示例代码尝试这样做:

<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" xmlns:local="*"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      [Bindable] 
      private var dpHierarchy:ArrayCollection = new ArrayCollection([ 
       {Region:"Southwest", categories: [ 
        {Region:"Arizona", categories: [ 
         {Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
         {Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000}]}, 
        {Region:"Central California", categories: [ 
         {Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000}]}, 
        {Region:"Nevada", categories: [ 
         {Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000}]}, 
        {Region:"Northern California", categories: [ 
         {Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
         {Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000}]}, 
        {Region:"Southern California", categories: [ 
         {Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
         {Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}]} 
       ]} 
      ]); 
     ]]> 
    </fx:Script> 

    <mx:AdvancedDataGrid width="100%" height="100%"> 
     <mx:dataProvider> 
      <mx:HierarchicalData source="{dpHierarchy}" 
           childrenField="categories"/> 
     </mx:dataProvider> 
     <mx:columns> 
      <mx:AdvancedDataGridColumn dataField="Region"/> 
      <mx:AdvancedDataGridColumn dataField="Territory_Rep" 
             headerText="Territory Rep"/> 
      <mx:AdvancedDataGridColumn dataField="Actual" itemRenderer="ColoredHeaderRenderer"/> 
      <mx:AdvancedDataGridColumn dataField="Estimate"/> 
     </mx:columns> 
    </mx:AdvancedDataGrid> 
</s:Application> 

而且,如下图所示,它工作正常: enter image description here

+0

我的怀疑是愚蠢的,但我想知道,因为你使用了一个itemrenderer coloredheader ...你在哪里创建这个你使用一个动作脚本文件或单独创建一个mxml .. –

+0

您可以创建一个mxml文件和代码这是我发布的第一个片段。 –

+0

我的怀疑是愚蠢的,但我想知道,因为你使用了一个itemrenderer coloredheader ...你在哪里创建这个你使用一个动作脚本文件或单独创建一个mxml ..本地:customelabel标记是由我自己创建的是这是指因为当我尝试在我的packge中优化ur代码时,它会在lblData.getTxt()中引发错误通过静态类型spark.components的引用访问可能未定义的属性背景:Label。 –

相关问题