给DataGrid设置背景色(汇总)

DataGrid颜色专题

[img]http://img.blog.163.com/photo/QdJLZEC73S6WlAJK9Gk6mA==/853995079340496022.jpg[/img]

在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/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值