使用itemRenderer给DataGrid添加复选框-DataGrid系列示例
先来看演示:
当用户点击DataGrid内的复选框时。在DataGrid下面出现单条记录的信息。
由于此示例需要包含自定义子组件和自定义事件,所以提供源代码下载而不再贴出全部代码。
关键知识点说明:
- itemRenderer的用法,itemRenderer是flex的DataGrid强大的精髓,正是由于此属性的存在,才有可能随心所欲的控制DataGrid的数据
- 创建自定义事件,并予以派发
先来看复选框子组件(view文件夹下)
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="40" height="24">
- <mx:Script>
- <![CDATA[
- import event.DataGridEvent;
- private function select():void{
- this.parentApplication.dispatchEvent(new DataGridEvent(data,check.selected));
- }
- ]]>
- </mx:Script>
- <mx:CheckBox id="check" x="0" y="0" change="select()" />
- </mx:Canvas>
CheckBox定义个change事件,在复选框的值被改变的时候,向父容器(DataGrid)派发自定义事件。
先来看自定义事件(event文件夹下)
- package event
- {
- import flash.events.Event;
- public class DataGridEvent extends Event
- {
- public var isSelect:Boolean;
- public var o:Object;
- public function DataGridEvent(_o:Object,_isSelect:Boolean):void
- {
- o = _o;
- isSelect = _isSelect;
- super("selectRow");
- }
- }
- }
自定义事件必须继承于Event。此事件接受二个参数,_o为该行数据,_isSelect复选框的值。
指的一提的是super(“selectRow”);这句非常关键。此句的意思是调用父类的构造函数,并将事件类型传递出去。
先来看主程序:
- <mx:DataGridColumn headerText="选择" itemRenderer="view.CheckBox" width="40" />
调用子组件
- addEventListener("selectRow",selectHandler);
- private function selectHandler(evt:event.DataGridEvent):void{
- if(evt.isSelect){
- title_label.text = "标题:"+evt.o.title;
- link_label.text = "链接:"+evt.o.link;
- pubDate_label.text = "发表日期:"+evt.o.pubDate;
- }else{
- title_label.text = "";
- link_label.text = "";
- pubDate_label.text = "";
- }
- }
监听自定义事件。



这个选中后复选框会出现混乱啊,怎么改啊
回复