DataGrid据数据变化动态变色

在很多实时数据更新系统如股票,我们需要在数据变化时,有闪烁效果,比如股票升了,用红色闪以下,跌了用绿色闪一下。这里提供一个例子,是用Labe作为DataGridItemRenderer,当数据变大时用红色字体闪一下,变小时用绿色闪一下。效果图如下,简单的用Button修改数据源。

Blink DataGrid根据数据变化动态变色 - 阿蔡 - Flex 技术博客

源代码如下:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

   <mx:Script>

   <![CDATA[

   import mx.controls.Alert;

   import mx.validators.ValidationResult;

   import mx.collections.ArrayCollection;

   [Bindable]

   privatevar dp:ArrayCollection=new ArrayCollection([{col1:'1',col2:'2',col3:'3'},{col1:'21',col2:'22',col3:'23'},{col1:'31',col2:'32',col3:'33'}]

                  );

   privatefunction changeRow1():void

   {

       dp.getItemAt(0)['col1'] = Math.round(Math.random()*100);

       dp.getItemAt(0)['col2'] = Math.round(Math.random()*100);

       dp.getItemAt(0)['col3'] = Math.round(Math.random()*100);

       dp.refresh();

   }

   privatefunction changeRow2():void

   {

       dp.getItemAt(1)['col1'] = Math.round(Math.random()*100);

       dp.getItemAt(1)['col2'] = Math.round(Math.random()*100);

       dp.getItemAt(1)['col3'] = Math.round(Math.random()*100);

       dp.refresh();

    }

   privatefunction changeRow3():void

   {

       dp.getItemAt(2)['col1'] = Math.round(Math.random()*100);

       dp.getItemAt(2)['col2'] = Math.round(Math.random()*100);

       dp.getItemAt(2)['col3'] = Math.round(Math.random()*100);

       dp.refresh();

    }

   ]]>

   </mx:Script>

   <mx:VBox width="100%" height="100%">

           

   <mx:DataGrid dataProvider="{dp}">

       <mx:columns>

          <mx:DataGridColumn dataField="col1">

              <mx:itemRenderer>

                  <mx:Component>

                     <mx:Label>

                         <mx:Script> 

                         <![CDATA[

                         privatevar lastData:Number;

                         privatevar frameCount :Number=-1;

                         overridepublicfunctionset data(value:Object):void{

                             super.data = value;

                             if(value != null){

                             if(lastData < value['col1']){ //lastData是临时数据,存储老的数据

                             frameCount =15;//控制闪烁持续时间变量

                                 this.setStyle("color","0xFF0000");//红色        

                                 addEventListener("enterFrame", enterFrameHandler);

                             }elseif( lastData > value['col1']){

                                 frameCount =15;//控制闪烁持续时间变量

                                 this.setStyle("color","0x00FF00");//绿色

                                 addEventListener("enterFrame", enterFrameHandler);

                             }                                                    

                             lastData = value.col1;

                             }

                         }

                         privatefunction enterFrameHandler(event:Event):void

                         {

                              frameCount--;

                              if (frameCount < 0)

                              {

                                  this.setStyle("color","0x0B333C");//颜色恢复成默认颜色

                                  removeEventListener("enterFrame", enterFrameHandler);

                               }

                         }

                        ]]>

                         </mx:Script>

                     </mx:Label>

                  </mx:Component>

               </mx:itemRenderer>

            </mx:DataGridColumn>

            <mx:DataGridColumn dataField="col2">

                <mx:itemRenderer>

                    <mx:Component>

                        <mx:Label>

                           <mx:Script> 

                           <![CDATA[

                           privatevar lastData:Number;

                           privatevar frameCount :Number=-1;

                           overridepublicfunctionset data(value:Object):void{

                               super.data = value;

                               if(value != null){

                                  if(lastData < value['col2']){ //lastData是临时数据,存储老的数据

                                      frameCount =15;//控制闪烁持续时间变量

                                      this.setStyle("color","0xFF0000");//red         

                                      addEventListener("enterFrame", enterFrameHandler);

                                  }elseif( lastData > value['col2']){

                                      frameCount =15;//控制闪烁持续时间变量

                                      this.setStyle("color","0x00FF00");//绿色

                                      addEventListener("enterFrame", enterFrameHandler);

                                   }                                                    

                                   lastData = value.col2;

                                }

                           }

                           privatefunction enterFrameHandler(event:Event):void

                           {

                                frameCount--;

                                if (frameCount < 0)

                                {

                                   this.setStyle("color","0x0B333C");//颜色恢复成默认颜色

                                   removeEventListener("enterFrame", enterFrameHandler);

                                 }

                           }

                           ]]>

                           </mx:Script>

                         </mx:Label>

                       </mx:Component>

                    </mx:itemRenderer>

                  </mx:DataGridColumn>

                  <mx:DataGridColumn dataField="col3">

                  <mx:itemRenderer>

                              <mx:Component>

                                    <mx:Label>

                                           <mx:Script> 

                                          <![CDATA[

                                          privatevar lastData:Number;

                                          privatevar frameCount :Number=-1;

                                          overridepublicfunctionset data(value:Object):void{

                                                super.data = value;

                                                  if(value != null){

                                                      if(lastData < value['col3']){ //lastData是临时数据,存储老的数据

                                                          frameCount =15;//控制闪烁持续时间变量

                                                          this.setStyle("color","0xFF0000");//红色        

                                                              addEventListener("enterFrame", enterFrameHandler);

                                                      }elseif( lastData > value['col3']){

                                                          frameCount =15;//控制闪烁持续时间变量

                                                          this.setStyle("color","0x00FF00");//绿色

                                                          addEventListener("enterFrame", enterFrameHandler);

                                                      }                                                    

                                                      lastData = value.col3;

                                                  }

                                                }

                                                privatefunction enterFrameHandler(event:Event):void

                                                {

                                                    frameCount--;

                                                    if (frameCount < 0)

                                                    {

                                                    this.setStyle("color","0x0B333C");//颜色恢复成默认颜色

                                                    removeEventListener("enterFrame", enterFrameHandler);

                                                  }

                                                }

 

                                          ]]>

                                          </mx:Script>

                                    </mx:Label>

                              </mx:Component>

                        </mx:itemRenderer>

                  </mx:DataGridColumn>

            </mx:columns>

      </mx:DataGrid>

      <mx:Button click="changeRow1()" label="Change Row1"/>

      <mx:Button click="changeRow2()" label="Change Row2"/>

      <mx:Button click="changeRow3()" label="Change Row3"/>

     

      </mx:VBox>

</mx:Application>

如果你要的是当数据变化是闪烁的是背景色当然也可以,只需要简单修改一下,这里我并没有对这个itemRenderer进行封装,有兴趣可以自己去封装一下。除了Label当然还可以用其他控件,如DataGridItemRenderer也是可以的。

应网友xwei的要求,需要改Label的背景色很简单。

this.opaqueBackground = 0xFF0000;替换老的setStyle即可。

this.setStyle("color","0xFF0000");//红色         

 

转载于:http://wmcai.blog.163.com/blog/static/48024200801424639644/

要去除颜色只要将this.opaqueBackground = null;就Ok了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进课程实践、课外项目或毕业设计。通过分析和运源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
您可以使用 `DataGrid` 的 `CellStyle` 属性和数据绑定来设置单元格的背景色。以下是一个示例,展示如何根据单元格中的数据大小设置单元格背景色: ```xaml <DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False"> <DataGrid.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text}" Value=""> <Setter Property="Background" Value="White"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource StringToDoubleConverter}, ConverterParameter=10}" Value="True"> <Setter Property="Background" Value="Green"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource StringToDoubleConverter}, ConverterParameter=5}" Value="True"> <Setter Property="Background" Value="Yellow"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource StringToDoubleConverter}, ConverterParameter=0}" Value="True"> <Setter Property="Background" Value="Red"/> </DataTrigger> </Style.Triggers> </Style> </DataGrid.CellStyle> <DataGrid.Columns> <DataGridTextColumn Header="Column1" Binding="{Binding Path=Property1}"/> <DataGridTextColumn Header="Column2" Binding="{Binding Path=Property2}"/> <DataGridTextColumn Header="Column3" Binding="{Binding Path=Property3}"/> </DataGrid.Columns> </DataGrid> ``` 在这个示例中,我们设置了 `DataGrid` 的 `CellStyle` 属性来指定单元格的样式。我们使用 `DataTrigger` 来根据单元格中的数据大小设置单元格背景色。在 `DataTrigger` 中,我们使用 `Binding` 属性来绑定单元格中的数据,并使用 `Value` 属性来指定匹配的值。我们还使用了一个自定义的值转换器 `StringToDoubleConverter`,用于将字符串转换为双精度浮点数。在 `Setter` 中,我们设置单元格的背景色为绿色、黄色或红色,具体颜色取决于数据大小。 注意,这只是一个示例,您需要根据自己的数据模型和需求来更改绑定路径和条件。同时,为了使数据转换器生效,您需要在 XAML 中添加一个资源: ```xaml <Window.Resources> <local:StringToDoubleConverter x:Key="StringToDoubleConverter"/> </Window.Resources> ``` 其中,`local` 是您自定义转换器类所在的命名空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值