Flex Datagrid 三类背景色设定

2024-03-25 10:18

本文主要是介绍Flex Datagrid 三类背景色设定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Flex运用中经常提到的有关DataGrid问题是如何改变DataGrid单元格(cell),列(column)和行(row)的背景颜色(backgroundcolor)
这里对这3种颜色做一个总结。

   1. 设置行(row)的背景色

主要是通过对DataGrid扩展,对protected函数drawRowBackground()进行重写,具体代码如下:

override protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number,color:uint, dataIndex:int):void
{
     if (dataIndex >= dataProvider.length) {
         super.drawRowBackground(s,rowIndex,y,height,color,dataIndex);
         return;
     }
     if (dataProvider.getItemAt(dataIndex).col3 < 2000) {//set color accordint to datas
         super.drawRowBackground(s,rowIndex,y,height,0xC0C0C0,dataIndex);
     } else {
         super.drawRowBackground(s,rowIndex,y,height,color,dataIndex);
     }


这段代码中根据DataGrid的数据源进行判断来设置背景色,但是它有个缺陷,就是这个具体的背景色我们无法自己灵活指定。因此派生出新的CustomRowColorDataGrid,具体代码如下:

package cwmlab.controls
{
      import mx.controls.*;
      import flash.display.Shape;
      import mx.core.FlexShape;
      import flash.display.Graphics;
      import flash.display.Sprite;
      import mx.rpc.events.AbstractEvent;
      import mx.collections.ArrayCollection;
      import flash.events.Event;
      /**
       * This is an extended version of the built-in Flex datagrid.
       * This extended version has the correct override logic in it
       * to draw the background color of the cells, based on the value of the
       * data in the row.
       **/

      public class CustomRowColorDataGrid extends DataGrid
      {
          private var _rowColorFunction:Function;
          public function CustomRowColorDataGrid()
            {
                  super();
            }
            /**
             * A user-defined function that will return the correct color of the
             * row. Usually based on the row data.
             *
             * expected function signature:
             * public function F(item:Object, defaultColor:uint):uint
             **/

            public function set rowColorFunction(f:Function):void
            {
                  this._rowColorFunction = f;
            }
          
            public function get rowColorFunction():Function
            {
                  return this._rowColorFunction;
            }
       
          /**
             * Draws a row background
             * at the position and height specified using the
             * color specified. This implementation creates a Shape as a
             * child of the input Sprite and fills it with the appropriate color.
             * This method also uses the <code>backgroundAlpha</code> style property
             * setting to determine the transparency of the background color.
             *
             * @param s A Sprite that will contain a display object
             * that contains the graphics for that row.
             *
             * @param rowIndex The row's index in the set of displayed rows. The
             * header does not count, the top most visible row has a row index of 0.
             * This is used to keep track of the objects used for drawing
             * backgrounds so a particular row can re-use the same display object
             * even though the index of the item that row is rendering has changed.
             *
             * @param y The suggested y position for the background
             * @param height The suggested height for the indicator
             * @param color The suggested color for the indicator
             *
             * @param dataIndex The index of the item for that row in the
             * data provider. This can be used to color the 10th item differently
             * for example.
           */

          override protected function drawRowBackground(s:Sprite,rowIndex:int,y:Number, height:Number, color:uint, dataIndex:int):void
          {
            if( this.rowColorFunction != null ){
                  if( dataIndex < this.dataProvider.length ){
                        var item:Object = this.dataProvider.getItemAt(dataIndex);
                        color = this.rowColorFunction.call(this, item, color);
                  }
            }           
            super.drawRowBackground(s, rowIndex, y, height, color, dataIndex);
          }
      }
}


在具体使用过程中可以这样调用:

<cwmlab:CustomRowColorDataGrid dataProvider="{dp}" rowColorFunction="setCustomColor">
private function setCustomColor(item:Object, color:uint):uint
{
    if( item['col3'] >= 2000 )
    {
        return 0xFF0033;
    }
    return color;
}

   2. 设置DataGrid列的背景色

这个很简单,只要设置DataGridColumn的属性backgroundColor="0x0000CC"即可。

   3. 设置DataGrid单元格(cell)的背景色

这个主要通过itemRenderer进行设置,itemRenderer可以是Label,也可以是其他如DataGridItemRenderer。

先看看用Label如何设置背景色

<mx:DataGridColumn headerText="Make" dataField="col1">
      <mx:itemRenderer>
             <mx:Component>
                  <mx:Label> <!--using label as itemRenderer-->
                      <mx:Script><![CDATA[
                          override public function set data(value:Object):void
                          {
                              super.data = value;
                              if(value.col1 == 'Toyota'){
                                 this.opaqueBackground =0xCC0000;
                              }
                          }
                     ]]></mx:Script>
                  </mx:Label>
             </mx:Component>
      </mx:itemRenderer>
</mx:DataGridColumn>

用DataGridItemRenderer进行背景色设置如下:

<mx:DataGridColumn headerText="Year" dataField="col3">
     <mx:itemRenderer>
          <mx:Component>
              <mx:DataGridItemRenderer><!--using DataGridItemRenderer as itemRenderer-->
                   <mx:Script><![CDATA[
                       override public function set data(value:Object):void
                       {
                           super.data = value;
                           if(value.col3 >= 2000){
                               this.background = true;
                               this.backgroundColor =0x00cc00;
                           }
                        }
                   ]]></mx:Script>
              </mx:DataGridItemRenderer>
          </mx:Component>
     </mx:itemRenderer>
</mx:DataGridColumn>

这篇关于Flex Datagrid 三类背景色设定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/844683

相关文章

【CSS】flex布局 - 左边超过打点, 右边完整展示

场景:宽度一定的情况下右边自适应,左边被挤压。 需要的效果如下: flex 的三个参数分别对应:flex-grow、flex-shrink、flex-basis。 flex-grow:定义项目的放大比例,默认为0。即如果存在剩余空间,也不放大。flex-shrink:定义项目的缩小比例,默认为1。即如果空间不足,该项目将缩小。flex-basis:定义在分配多余空间之前,项目占据的主轴空间。

Flink实例(114):自定义时间和窗口的操作符(十三)自定义窗口分配器之设定窗口开始与结束时刻

1. 自定义窗口分配器(flink1.11.2) package com.atguigu.exercise.ETL.caiutilimport java.text.SimpleDateFormatimport java.utilimport java.util.{Collections, Date}import org.apache.flink.api.common.Executio

关于Apache Flex 4.12

[转载]Apache Flex 4.12 正式版发布 (2014-03-12 17:44:34) 转载▼ 标签: apacheflex4.12 sdk it 分类:Flash平台 原文地址:Apache Flex 4.12 正式版发布! 作者:  Dark_Stone 此文章由 周戈 (DarkStone) 原创 ,转载请注明来源! 日期: 2014-03

java分为 三类 ME,SE,EE

java分为 三类  ME,SE,EE  Java SE=Java Standard EditionJava EE=Java Enterprise Edition Java ME=Java Mobile Edition SE主要用于桌面程序,控制台开发(JFC)EE企业级开发(JSP,EJB)ME嵌入式开发(手机,小家电)   具体介绍: * Java SE(Java Platfor

Element-ui设置table 选中某行高亮自定义背景色

Element-ui设置table 选中某行高亮自定义背景色 在el-table标签中添加单选 highlight-current-row <el-table highlight-current-row @row-click="mainBodySelectionChange"></el-table> 在style中设置颜色 /* 设置当前页面element全局table 选中某行时的背景色

css弹性盒子——flex布局

目录 ​编辑 一、flex容器的样式属性(父元素属性)  display:flex  弹性盒子,实现水平排列,在父盒子设置,适用于单行/单列 justify-content 二、flex元素的样式属性(子元素属性) 1.flex-grow  2.flex-shrink 3.flex-basis 4.flex组合属性 flex:flex-grow flex-shrink f

css中设定长度的例外情况

看下面的例子: div { font-size: 40px; width: 10em; /* 400px */ height: 10em; border: solid 1px black; } p { font-size: 0.5em; /* 20px */ width: 10em; /* 200px */ height: 10em; border: solid 1px

小程序 flex 布局框架(源码分享)

源码摘自小编的原创文章《小程序全局样式(app.wxss 源码分享)》, 文章链接:https://blog.csdn.net/u013350495/article/details/93141910 在线示例:http://www.jq22.com/jquery-info19340 /* 列式弹性盒子 */.flex_col {display: flex;flex-direction: ro

Flex导致设置的width:100%不生效问题

因为设置了display: flex; 导致block布局变成了flex布局, 所以如果想要在已经设置了flex布局的基础上,再进行子元素的宽100%设置的话,可以应用下面的样式:(在该子元素上设置) flex-shrink: 0;width: 100%; 这样就可以生效了。