Browse > Home » FLEX » DataGrid 单元格 字体颜色

DataGrid 单元格 字体颜色

六月 16th, 2009 Leave a comment

DataGrid里面的单元格默认的字体颜色都是黑色,很多时候都需要根据不同的数据进行不同的颜色筛选,今天我就遇到了这个问题,共享一个自己弄完的Demo,强调一下,是改变某一行的单元格字体颜色而不是改变单元格的背景颜色, ;-) 啰嗦了一下,免得有人搞错(刚开始领导的意思就被我这样误解了, :!: )。
或许你是直接使用itemRenderer,然后override itemRenderer的set data()方法,在set data方法里面进行判断,这样表面虽然可行,但是点击表头进行排序,或者拖动滚动条时,就会因为DataGrid 的updateDisplayList影响到颜色与对应的行数据混乱现象,这种现象网上很多,例如DataGrid内嵌CheckBox问题,等等。
我的解决方法是之间在数据源进行操作,不管你怎么updateDisplayList,都不关我事! :mrgreen:
我自定义了一个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

转载请注明: 出自 FlexHome
原文链接:http://flex.desizen.com/datagrid-row-color/

Related Posts

8 条评论 »
  1. joel (2009/06/16) Reply to this comment

    沙发我坐了 ;-)
    估计没啥大姐姐瞎转悠到这里来的 :shock: 你就别做美梦啦,哈哈 :grin:

  2. warmC (2009/06/18) Reply to this comment

    梦?美梦?幻觉,幻觉!

  3. 射击博客 (2009/06/18) Reply to this comment

    不是很懂

  4. joel (2009/06/18) Reply to this comment

    @射击博客:哪里不懂可以留言投诉他 :mrgreen:

  5. warmC (2009/06/18) Reply to this comment

    @射击博客:哥们,别听楼上乱说,不懂可以问我!

  6. ydf (2009/12/31) Reply to this comment

    哦,还可以这么做,领教。
    我们项目也有这个需求,根据不同的数据,显示不同的字体颜色。
    我这么写的,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的时候,显示红色。
    交流而已,欢迎批评。

  7. ydf (2009/12/31) Reply to this comment

    我这么写的,MXML文件里的代码(补)
    controls:ShjDataGridColumn headerText=”header” dataField=”@MOTO_SHUTSUENSHA_LIST_YAKUWARI_CDFUITTIFLG”>

  8. 开心凡人 (2010/01/29) Reply to this comment

    周末又来了,四处游荡,呵呵

Leave a Reply

emoticons