Flex动态DataGridColumn的渲染方法

有动态的DataGridColumn,需要判断内容数字大于0的,变红色

首先是DataGridItemRenderer,因为是简单的文字变色,DataGridItemRenderer继承自UITextField,只修改文字的样式就可以了

package
{
    import mx.controls.dataGridClasses.DataGridItemRenderer;
    import mx.controls.dataGridClasses.DataGridListData;
    
    public class AlarmStatisticsRenderer extends DataGridItemRenderer
    {
        private var bgColor:uint = 0xff0000;
        
        public function AlarmStatisticsRenderer()
        {
            super();
            this.setStyle("fontSize","13");
            this.setStyle("fontWeight","bold");
        }
        
        override public function set data(value:Object):void
        {
            super.data = value;
            if(data)
            {
                var df:String = (this.listData as DataGridListData).dataField;//这个就是判断动态dataField的地方了
                if(int(data[df]) > 0)
                {
                    this.setStyle("color",bgColor);
                } else
                {
                    this.setStyle("color",0xffffff);
                }
            }
        }
    }
}

使用方法:

创建一个IFactory 

    /**表格内容渲染器*/
        private static var dgRenderer:IFactory = new ClassFactory(AlarmStatisticsRenderer);

在动态生成DataGridColumn的时候,设置itemRenderer

        var neColum:DataGridColumn = new DataGridColumn();
              neColum.setStyle("textAlign","center");
              neColum.dataField = key;
              neColum.headerText = getCnName(key);
              neColum.itemRenderer = dgRenderer;
              colArr.push(neColum);

这样数据中大于0的,就会变成红色

 

对于更复杂的渲染器,可以通过实现mx.controls.listClasses.IDropInListItemRenderer接口来取到listData

注意实现该接口,需要增加listData的get和set方法,代码如下:

      //----------------------------------
            //  listData
            //----------------------------------
            /**
             *  @private
             */
            private var _listData:DataGridListData;
            
            public function get listData():BaseListData
            {
                return _listData;
            }
            
            /**
             *  @private
             */
            public function set listData(value:BaseListData):void
            {
                _listData = DataGridListData(value);
            }

 

posted @ 2012-11-20 11:32  小小有  阅读(407)  评论(0)    收藏  举报