DataGrid 单元格 字体颜色
DataGrid里面的单元格默认的字体颜色都是黑色,很多时候都需要根据不同的数据进行不同的颜色筛选,今天我就遇到了这个问题,共享一个自己弄完的Demo,强调一下,是改变某一行的单元格字体颜色而不是改变单元格的背景颜色,
啰嗦了一下,免得有人搞错(刚开始领导的意思就被我这样误解了,
)。
或许你是直接使用itemRenderer,然后override itemRenderer的set data()方法,在set data方法里面进行判断,这样表面虽然可行,但是点击表头进行排序,或者拖动滚动条时,就会因为DataGrid 的updateDisplayList影响到颜色与对应的行数据混乱现象,这种现象网上很多,例如DataGrid内嵌CheckBox问题,等等。
我的解决方法是之间在数据源进行操作,不管你怎么updateDisplayList,都不关我事! ![]()
我自定义了一个MyDataGrid类,继承DataGrid,override set dataProvider方法,在里面做判断,判断的权力交给了调用者。
ControlDataField属性是判断凭据的引用,也就是等下通过这个值进行判断,如果没有设置,就和一般的DataGrid没有什么区别了。
ControlFunction属性就是判断方法,如果你是最简单的数字正负判断的话,大可不必设置这个属性,直接交给MyDataGrid控制,如下面代码,通过Price属性进行正负数字判断:
<local:MyDataGrid ControlDataField="Price" dataProvider="{DGArray1}"> <local:columns> <mx:DataGridColumn dataField="Artist" itemRenderer="MyDGIRenderer"/> <mx:DataGridColumn dataField="Album" itemRenderer="MyDGIRenderer"/> <mx:DataGridColumn dataField="money" itemRenderer="MyDGIRenderer"/> <mx:DataGridColumn dataField="Price" itemRenderer="MyDGIRenderer"/> </local:columns> </local:MyDataGrid>
如果判断凭据的值需要特殊对待,就需要自定义处理方法,如下,通过ControlFunc方法,对money凭据进行处理,返回对应的颜色值:
<local:MyDataGrid ControlFunction="{ControlFunc}" ControlDataField="money" dataProvider="{DGArray}"> <local:columns> <mx:DataGridColumn dataField="Artist" itemRenderer="MyDGIRenderer"/> <mx:DataGridColumn dataField="Album" itemRenderer="MyDGIRenderer"/> <mx:DataGridColumn dataField="money" itemRenderer="MyDGIRenderer"/> <mx:DataGridColumn dataField="Price" itemRenderer="MyDGIRenderer"/> </local:columns> </local:MyDataGrid>
private function ControlFunc(data:Object):uint{
data=data.toString().substring(0,data.toString().lastIndexOf("万"));
var value:Number=Number(data);
if(value>0){
return 0xff0000;
}else if(value<0){
return 0x0000ff;
}
return null;
}不多说了,有想法的自己下载看看吧!另外说明一下ControlFunction, ControlDataField, dataProvider,值的设置问题,最好按照这种顺序,因为我没有做其他的判断,不然的话结果还是和普通的DataGrid一样!
<local:MyDataGrid ControlFunction="{ControlFunc}" ControlDataField="money" dataProvider="{DGArray}">老是觉得那个地方有点欠妥,大兄弟、大妹子要是有好意见的话,记得留个言……
源码在这里下载地址1 下载地址2
原文链接:http://flex.desizen.com/datagrid-row-color/





joel (2009/06/16)
沙发我坐了
你就别做美梦啦,哈哈
估计没啥大姐姐瞎转悠到这里来的
warmC (2009/06/18)
梦?美梦?幻觉,幻觉!
射击博客 (2009/06/18)
不是很懂
joel (2009/06/18)
@射击博客:哪里不懂可以留言投诉他
warmC (2009/06/18)
@射击博客:哥们,别听楼上乱说,不懂可以问我!
ydf (2009/12/31)
哦,还可以这么做,领教。
我们项目也有这个需求,根据不同的数据,显示不同的字体颜色。
我这么写的,MXML文件里的代码
然后在model文件下的as代码这么写
/**
* @param :value-String
* @return :int
*/
public function getColor(value:String):int {
var color:int;
if (ShjCodeConst.FLAG_ON == value) {
color = 0xff0000;
}
return color;
}
我这个是当data.@MOTO_SHUTSUENSHA_LIST_YAKUWARI_CD是1的时候,显示红色。
交流而已,欢迎批评。
ydf (2009/12/31)
我这么写的,MXML文件里的代码(补)
controls:ShjDataGridColumn headerText=”header” dataField=”@MOTO_SHUTSUENSHA_LIST_YAKUWARI_CDFUITTIFLG”>
开心凡人 (2010/01/29)
周末又来了,四处游荡,呵呵