`
bufanliu
  • 浏览: 200604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

给DataGrid设置背景色(汇总)

    博客分类:
  • FLEX
阅读更多
DataGrid颜色专题



在Flex运用中经常提到的有关DataGrid问题是如何改变DataGrid单元格(cell),列(column)和行(row)的背景颜色(backgroundcolor)

很久之前就做过这样的总结,一直没有整理出来,现在在这里对这3种颜色做一个总结(后面有demo和源码下载)。



设置行(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;

}

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

设置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>

转至:http://wmcai.blog.163.com/blog/static/4802420080842548600/

分享到:
评论

相关推荐

    WPF中DataGrid自定义实现最后一行下面跟一个汇总行,类似MT4

    9. **美化样式**:为了让汇总行更加醒目,你可以在样式中调整字体颜色、背景色,甚至添加边框。 通过以上步骤,你就能在WPF的DataGrid中实现类似MT4的汇总行功能。这种自定义不仅可以应用于金融领域,还可以广泛...

    DataGrid 控件中的汇总行

    在事件处理程序中,检查每行的数据以确定是否为汇总行,然后使用不同的模板或样式来呈现它们,比如改变字体颜色、背景色或者添加总计标识。 以下是一个基本的步骤概述: 1. **数据准备**:修改SQL查询以包含汇总行...

    WPF datagrid foot合计行源代码

    2. **样式和模板**:要创建一个合计行,可能需要定义一个特殊的`DataGridRow`模板,设置不同的背景色、字体样式等,以区分普通数据行。 3. **自定义列**:如果需要更复杂的合计(如平均值、百分比等),可能需要...

    SG-UAP平台认证考试知识点汇总.doc

    :Datagrid允许用户设置单元格的编辑后变色,可以使用css样式来设置单元格的背景色、字体颜色等。 四、RESTClient 10. RESTClient的post请求?:RESTClient是MX框架中的一种控件,用于发送REST请求。post请求是...

    delphi 开发经验技巧宝典源码

    0014 改变窗体Hint背景色 11 0015 以原始风格显示控件的滚动条 11 0016 使用快捷键打开对象观察器中的“...”按钮 11 1.5 其他相关应用技巧 11 0017 安装合适的Delphi版本 11 0018 熟练掌握Delphi中的...

    delphi 开发经验技巧宝典源码06

    0014 改变窗体Hint背景色 11 0015 以原始风格显示控件的滚动条 11 0016 使用快捷键打开对象观察器中的“...”按钮 11 1.5 其他相关应用技巧 11 0017 安装合适的Delphi版本 11 0018 熟练掌握Delphi中的...

    jQuery EasyUI

    - **条件设置行背景颜色**:可以根据数据的不同值来设置行的背景色。 - **创建属性网格**:专门用来展示对象属性的网格。 - **扩展行显示细节**:可以为某一行数据提供额外的详情展示。 - **创建子网格**:在某...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例022 背景为渐变色的程序界面 实例023 椭圆形的程序界面 实例024 自绘窗体界面 实例025 类似Windows XP的程序界面 实例026 窗体融合技术 实例027 限制对话框最大时的窗口大小 1.7 多媒体宣传光盘应用实例 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例022 背景为渐变色的程序界面 实例023 椭圆形的程序界面 实例024 自绘窗体界面 实例025 类似Windows XP的程序界面 实例026 窗体融合技术 实例027 限制对话框最大时的窗口大小 1.7 多媒体宣传光盘应用实例 ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例022 背景为渐变色的程序界面   cc实例023 椭圆形的程序界面   cc实例024 自绘窗体界面   cc实例025 类似WindowscXP的程序界面   cc实例026 窗体融合技术   cc实例027 限制对话框最大时的...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例022 背景为渐变色的程序界面   cc实例023 椭圆形的程序界面   cc实例024 自绘窗体界面   cc实例025 类似WindowscXP的程序界面   cc实例026 窗体融合技术   cc实例027 限制对话框最大时的...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    1.5 导航界面应用实例 cc实例018 Outlook导航界面 cc实例019 树状导航界面 cc实例020 按钮导航界面 cc实例021 类QQ导航菜单 1.6 界面窗体应用实例 cc实例022 背景为渐变色的程序界面 cc实例023 椭圆...

Global site tag (gtag.js) - Google Analytics