最近,项目需求需要在DataGrid上动态生成GridColumn以及设置其为ComboBox,默认是为TextInput。
Flex 4.6使用s:DataGrid组件而不是mx:DataGrid,网上很多资料都是mx组件的,于是写了这篇文章。
首先,s:DataGrid的标题栏存储的对象是GridColumn。
标题栏动态添加函数
<span style="font-family:Microsoft YaHei;font-size:18px;"> var columnsPro:GridColumn = new GridColumn(); columnsPro.headerText = headerText; columnsPro.dataField = dataField; columnsPro.width = 80; contentGrid.columns.addItem(columnsPro);</span>这里contentGrid是你的DataGrid的id号
设置列为自定义控件要用到GridColumn的itemRenderer属性。
首先,新建一个mxml组件,我们叫pointSymbol,里面代码如下
<span style="font-family:Microsoft YaHei;font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="100" height="30">
<fx:Script>
<span style="white-space:pre"> </span></fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:layout>
<s:HorizontalLayout verticalAlign="middle" horizontalAlign="center"/>
</s:layout>
<!--<s:Image source="{data.dataField4}"/> -->
<mx:ComboBox id="ComBo" width="100" height="30" change="pointRankChange(event)"/>
</s:GridItemRenderer></span>
初始化显示ComboBox值需要重载方法
<span style="font-family:Microsoft YaHei;font-size:18px;"> override public function set data(value:Object):void
{
super.data = value;
ComBo.dataProvider = pointlabel;
ComBo.selectedIndex = getArrayCollectionIndex(pointlabel,value.rank);
}</span>这里getArrayCollectionIndex是我自己定义的方法,你们可以不用考虑,value是你传入的Object对象,你可以自己定义ComboBox显示到多少位置,pointLabel是我定义的ArrayCollection对象。
当ComboBox更改时,需要你的主界面存储更改的值,就需要使用到dispatchEvent事件
<span style="font-family:Microsoft YaHei;font-size:18px;"> protected function pointRankChange(event:ListEvent):void
{
// TODO Auto-generated method stub
var myEvent : ListEvent = new ListEvent("pointChange");
myEvent.reason = ComBo.selectedLabel;
this.parentApplication.dispatchEvent(myEvent);
}</span>
这里Combo是ComboBox的id号。
在主界面监听该方法,并且把itemRender设置为当前自定义的控件。
<span style="font-family:Microsoft YaHei;font-size:18px;">comboboxFactory = new ClassFactory(pointSymbol);
addEventListener("pointChange",ComBoBoxChange);</span>然后<span style="font-family:Microsoft YaHei;font-size:18px;">columnsPro.itemRenderer = comboboxFactory; </span>
在主界面.mxml中,复写方法ComBoBoxChange即可。
<span style="font-family:Microsoft YaHei;font-size:18px;"> var item:Object=contentGrid.selectedItem;
var index:int=contentGrid.dataProvider.getItemIndex(item);
var item:Object = contentGrid.dataProvider.getItemAt(index);
if(event.type == "pointChange"){
item.rank = event.reason;
}</span><span style="white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family:Microsoft YaHei;font-size:18px;">contentGrid.dataProvider.setItemAt(item,index);</span></span>为了省事,我把值存到了event.reason属性中。
以上便是DataGrid自定义ComboBox并且获取其值,当然,自定义其余控件都可以。
版权声明:本文为博主原创文章,未经博主允许不得转载。
Flex4.6 DataGrid自定义ComboBox并获取自定义ComboBox的值
原文地址:http://blog.csdn.net/liming199364/article/details/46763837