• DataGrid 单元格 字体颜色

    2009-06-17 23:39/点击数()

    原文链接:http://flex.joelove.cn/datagrid-row-color/ DataGrid里面的单元格默认的字体颜色都是黑色,很多时候都需要根据不同的数据进行不同的颜色筛选,今天我就遇到了这个问题,共享一个自己弄完的Demo,强调一下,是改变 某一行的单元格字体颜色 而不是

     

    原文链接:http://flex.joelove.cn/datagrid-row-color/

     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}">

    老是觉得那个地方有点欠妥,大兄弟、大妹子要是有好意见的话,记得留个言……
     

     

     

上一篇:Flex DataGrid 分页

下一篇:72小时学会AS3.0--第一小时

帮我订酒店网 广交会酒店 广州酒店预订 刷钻源码 刷信誉程序 广州网站建设 淘宝缩阴排行榜 减肥精油排行榜 淘宝缩阴排行榜 减肥精油排行榜 山寨iphone5 策恩 Ceen 世界皮鞋品牌 休闲男鞋品牌 男士商务男鞋 高端男士皮鞋 淘宝男士皮鞋 男士透气皮鞋