今天做个项目时需要用到datagrid与checkbox结合,找了一篇很好的文章,《在Flex中简单实现 dataGrid结合CheckBox使项目可选、全选、反选》,但是发现其checkbox在属性列中没有居中,没有达到理想效果,继续在网上游弋,尔后又找到一篇,摘取了其中用于将checkbox剧中的代码,well done!
以下是完善后的代码:
CheckBoxHeaderRenderer.as
package { import flash.display.DisplayObject; import flash.events.Event; import flash.text.TextField; import mx.collections.ArrayCollection; import mx.controls.CheckBox; import mx.controls.DataGrid; public class CheckBoxItemDataRenderer extends CheckBox { private var currentData:Object; //保存当前一行值的对象 public function CheckBoxItemDataRenderer() { super(); this.addEventListener(Event.CHANGE, changeHandler); } override public function set data(value:Object):void { this.currentData= value; this.selected = value.selected == "true"?true:false; } protected function changeHandler(event : Event) : void { currentData.selected = this.selected.toString(); } /*override public function get data():Object{ return currentData; }*/ // 居中展现 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); var n:int = numChildren; for(var i:int = 0; i < n; i++) { var c:DisplayObject = getChildAt(i); if( !(c is TextField)) { c.x = Math.round((unscaledWidth - c.width) / 2); c.y = Math.round((unscaledHeight - c.height) /2 ); } } } } }
CheckBoxItemDataRenderer.as
package { import flash.display.DisplayObject; import flash.events.Event; import flash.text.TextField; import mx.collections.ArrayCollection; import mx.controls.CheckBox; import mx.controls.DataGrid; public class CheckBoxItemDataRenderer extends CheckBox { private var currentData:Object; //保存当前一行值的对象 public function CheckBoxItemDataRenderer() { super(); this.addEventListener(Event.CHANGE, changeHandler); } override public function set data(value:Object):void { this.currentData= value; this.selected = value.selected == "true"?true:false; } protected function changeHandler(event : Event) : void { currentData.selected = this.selected.toString(); } /*override public function get data():Object{ return currentData; }*/ // 居中展现 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); var n:int = numChildren; for(var i:int = 0; i < n; i++) { var c:DisplayObject = getChildAt(i); if( !(c is TextField)) { c.x = Math.round((unscaledWidth - c.width) / 2); c.y = Math.round((unscaledHeight - c.height) /2 ); } } } } }

浙公网安备 33010602011771号