自定义DataGrid组件的标题

有的时候需要在DataGrid组件中为每列显示两行的标题。要实现它,其实并不难。在DataGridColumn 类中有一个headerRenderer 属性,所以我们可以使用它来完成。

MXML代码如下:

    Actionscript: <?xmlversion="1.0"encoding="utf-8"?>
    
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"horizontalAlign="left"paddingLeft="3"verticalGap="5">
       
</mx><mx :Script>
         
<![CDATA[
           
           importmx.controls.dataGridClasses.DataGridColumn;
           
           [Bindable]
           privatevar text:String;
           [Bindable]
           privatevar topText:String;
           [Bindable]
           privatevar src:String;
           
           override publicfunction setdata(value:Object):void
           {
             var col:DataGridColumn = value as DataGridColumn;
             if(col)
             {
               var arr:Array= col.headerText.split(':::');
               text= arr[0];
               topText = arr[1];
             }
           }
         
]]>
       
</mx>
       
<mx :Label id="topTextLbl"text="{topText}"fontWeight="bold"/>
   
<mx :Label id="txtLbl"text="{text}"fontWeight="bold"/>

 

再创建DataGrid的扩展类,代码如下:

 

 

     package  controls
    
... {
       importmx.controls.DataGrid;
       importmx.controls.dataGridClasses.DataGridColumn;
       importmx.core.ClassFactory;
       
       publicclass MyDataGrid extendsDataGrid
       
...{
         publicfunction MyDataGrid()
         
...{
           
         }

       
         override 
protected function commitProperties():void
         
...{
           
super.commitProperties();
           
           draggableColumns 
= false;
           editable 
= false;
           resizableColumns 
= true;
           sortableColumns 
= true;
     
           var colName:DataGridColumn 
= new DataGridColumn();
           colName.headerRenderer
= new ClassFactory(MyDataGridHeader);
           colName.headerText
= "Name:::Web";
           colName.dataField
= "name";
           
           var colLink:DataGridColumn 
= new DataGridColumn();
           colLink.headerRenderer
= new ClassFactory(MyDataGridHeader);
           colLink.headerText
= "Link:::URL";
           colLink.dataField
= "link";
           
           columns 
= [colName, colLink];
         }

       }

    }

 

OK,现在创建一个应用来测试一下刚刚建立的扩展组件。

 

     <? xmlversion="1.0"encoding="utf-8" ?>
    
< mx  :Application xmlns:local ="*" xmlns:mx ="http://www.adobe.com/2006/mxml" layout ="absolute" xmlns:controls ="controls.*" >
     
         
< controls  :MyDataGrid width ="300" rowCount ="5" dataProvider ="{dp}" />
         
         
</ mx >< mx  :Script >
           
<![CDATA[
             importmx.collections.ArrayCollection;
             [Bindable]
             publicvar dp:ArrayCollection = new ArrayCollection([{name:'Franto.com Blog',url:'http://blog.franto.com'},{name:'Adobe.com Labs',url:'http://labs.adobe.com'}]);
           
]]>
         
</ mx >  

 

上面的这种情况是固定的自定义标题,如果有多个列都想自定义,怎么办?我们可以扩展DataGridColumn类, 编写一个MyDataGridColumn类来添加这些自定义的属性。在这个例子里我们设置两个属性 text 和 topText。

 

     package  controls
    
... {
       importmx.controls.dataGridClasses.DataGridColumn;
     
       publicclass MyDataGridColumn extendsDataGridColumn
       
...{
          privatevar _text:String;
          privatevar _topText:String;
     
         publicfunction gettext():String
         
...{
           return_text;
         }

         publicfunction settext(value:String):
void
         
...{
           _text 
= value;
         }

         publicfunction gettopText():String
         
...{
           return_topText;
         }

         publicfunction settopText(value:String):
void
         
...{
           _topText 
= value;
         }

       }

    }

 

很简单吧,现在你可以在MyDataGrid类中改变你的commitProperties ,代码如下:

 

     var  colName:MyDataGridColumn  =   new  MyDataGridColumn();
       colName.headerRenderer
=   new  ClassFactory(MyDataGridHeader);
       colName.text
=   " Name " ;
       colName.topText
=   " Web " ;
       colName.dataField
=   " name " ;
           
       
var  colLink:MyDataGridColumn  =   new  MyDataGridColumn();
       colLink.headerRenderer
=   new  ClassFactory(MyDataGridHeader);
       colLink.text
=   " Link " ;
       colLink.topText
=   " URL " ;
   colLink.dataField
=   " url "

演示地址:http://www.franto.com/blog2/wp-download/flex/examples/customDataGrid2/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值