Flex4 自定义Datagrid的itemRenderer和headerRenderer【转】先看图片:?因为项目中需要用到datagrid,而且需要
Flex4 自定义Datagrid的itemRenderer和headerRenderer【转】
先看图片:
![Flex4 自定义Datagrid的itemRenderer跟headerRenderer【转】]()

?因为项目中需要用到datagrid,而且需要在其中嵌入dropdownlist,包括header和item。
一开始嵌入的是Combobox,但是发现用Combobox的话,稍微动一个datagrid,如改变大小等,Combobox里的数据立刻不见了,所以使用dropdownlist控件,反正是Flex4.1。
?废话完毕,上代码:
for datagrid:
<?xml?version="1.0"?encoding="utf-8"?>
<s:MXDataGridItemRenderer?xmlns:fx="http://ns.adobe.com/mxml/2009"?
??????????????????????????xmlns:s="library://ns.adobe.com/flex/spark"?
??????????????????????????xmlns:mx="library://ns.adobe.com/flex/mx"?
??????????????????????????focusEnabled="true"?creationComplete="cc()">
????<fx:Script>
????????<![CDATA[
????????????import?mx.collections.*;
????????????import?mx.collections.ArrayCollection;
????????????import?mx.controls.Alert;
????????????import?mx.controls.DataGrid;
????????????import?mx.controls.dataGridClasses.DataGridColumn;
????????????import?mx.controls.dataGridClasses.DataGridHeader;
????????????import?mx.events.FlexEvent;
????????????
????????????import?spark.events.IndexChangeEvent;
????????????[Bindable]
????????????private?var?headItems:ArrayCollection=new?ArrayCollection([
????????????????{label:"company",data:1},
????????????????{label:"group",data:2}
????????????????]);
????????????private?var?col:DataGridColumn=null;
????????????override?public?function?set?data(value:Object):void
????????????{????????????????
????????????????if(value?!=?null)
????????????????{
????????????????????col?=?(value?as?DataGridColumn);
????????????????????super.data?=?value;????
????????????????}????????????????
????????????}
????????????override?public?function?get?data():Object{
????????????????return?headItems;
????????????}
????????????protected?function?cc():void{????????????????
????????????????var?dg:DataGrid?=this.parent.parent?as?DataGrid;
????????????????if(col!=null)
????????????????????col.headerText=dHeader.selectedItem.label;
????????????}
????????????
????????]]>
????</fx:Script>
????<s:layout>????????
????????<s:VerticalLayout/>
????</s:layout>????
????
????<s:DropDownList?id="dHeader"?labelField="label"?selectedIndex="0"?width="80"?dataProvider="{headItems}"
?????????????????????????change="cc()"?/>????
</s:MXDataGridItemRenderer>
其中,itemRenderer不是问题,难点在HeaderRender上面,因为需要获取header上的ddl选择的值,而flex的datagrid大家知道,他是不能像c#那样findControl的,所以我用了一个全局变量private var col:DataGridColumn=null;来存储当前是哪一列,然后将ddl的值绑定到该列的headerText上.