在DataGrid 中运用LinkButtion(重写LinkButtion)

在DataGrid 中使用LinkButtion(重写LinkButtion)

在DataGrid 中使用LinkButtion(重写LinkButtion):
(1) MyGrid.mxml:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
      creationComplete="application1_creationCompleteHandler(event)">
 <fx:Declarations>
  <!-- Place non-visual elements (e.g., services, value objects) here -->
 </fx:Declarations>
 
 <mx:DataGrid id="mygrid">
  <mx:columns>
   <mx:DataGridColumn dataField="name" headerText="姓名"/>
   <mx:DataGridColumn dataField="sex" headerText="性别"/> 
   <mx:DataGridColumn dataField="age" headerText="年龄"/>
   <mx:DataGridColumn dataField="name2" headerText="姓名2" itemRenderer="{item}"/>
   <mx:DataGridColumn dataField="name2" headerText="姓名2" itemRenderer="{item2}"/>
  </mx:columns>
 </mx:DataGrid>
 
 <fx:Script>
  <![CDATA[
   import but.MyLinkButton;
   
   import mx.collections.ArrayCollection;
   import mx.controls.LinkButton;
   import mx.events.FlexEvent;
   [Bindable]  //必须绑定,否则不显示
   private var item:ClassFactory; //没有重写
   [Bindable]
   private var item2:ClassFactory; //必须重写,否则无法处理,点击之后需要处理的

   protected function application1_creationCompleteHandler(event:FlexEvent):void
   {
    var arr:ArrayCollection=new ArrayCollection();
    var obj:Object=new Object();
    obj.name="1";
    obj.age="20"
    obj.sex="男";
    arr.addItem(obj);
    
    obj=new Object();
    obj.name="11";
    obj.age="22"
    obj.sex="男";
    arr.addItem(obj);
    
    obj=new Object();
    obj.name="12";
    obj.age="23"
    obj.sex="女";
    arr.addItem(obj);
    
    mygrid.dataProvider=arr;
    
    item=new ClassFactory(LinkButton); //没有重写的button,没有什么用处
    item.properties={label:'修改',data:'edit'};
    
    //重写LinkButton,重写protected function clickHandler(event:MouseEvent):void,只有继承才可以改变这个方法,子类覆盖父类
    item2=new ClassFactory(MyLinkButton);
    //item2.properties={label:'删除',data:'delete'}; //获取的data=null
    var dobj:Object=new Object();
    dobj.name="abc";
    item2.properties={label:'删除',data:dobj}; //data是个object,可以获取到值
   }

  ]]>
 </fx:Script>
</s:Application>

 

(2) MyLinkButton.as:

package but
{
 import flash.events.MouseEvent;
 
 import mx.controls.Alert;
 import mx.controls.LinkButton;
 
 public class MyLinkButton extends LinkButton
 {
  public function MyLinkButton()
  {
   super();
  }
  
  //重写一个方法,必须加override
  override protected function clickHandler(event:MouseEvent):void{
   super.clickHandler(event); //可写可不写
   Alert.show("--"+this.data.name,"提示");
   Alert.show(super.data.name); //this.data.name 与super.data.name一样
  }
  
  //如果没有data set方法,上面的this.data as String =null
  //如果页面上data 传的是个object,不需要 data set方法
  /*override public function set data(value:Object):void
  {
   super.data=value;
  }*/
 }
}

 

还有一个问题,就是LinkButton的样式?