最近,项目需求需要在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