【AI插件】Flex4.6 DataGrid自定义ComboBox并获取自定义ComboBox的值

来源:互联网 发布:解放台湾 知乎 编辑:程序博客网 时间:2024/04/30 01:04

最近,项目需求需要在DataGrid上动态生成GridColumn以及设置其为ComboBox,默认是为TextInput。

Flex 4.6使用s:DataGrid组件而不是mx:DataGrid,网上很多资料都是mx组件的,于是写了这篇文章。


首先,s:DataGrid的标题栏存储的对象是GridColumn。

标题栏动态添加函数

var columnsPro:GridColumn = new GridColumn();columnsPro.headerText = headerText;columnsPro.dataField = dataField;columnsPro.width = 80;contentGrid.columns.addItem(columnsPro);
这里contentGrid是你的DataGrid的id号

设置列为自定义控件要用到GridColumn的itemRenderer属性。

首先,新建一个mxml组件,我们叫pointSymbol,里面代码如下

<?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></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>
初始化显示ComboBox值需要重载方法

override public function set data(value:Object):void{super.data = value;ComBo.dataProvider = pointlabel;ComBo.selectedIndex = getArrayCollectionIndex(pointlabel,value.rank);}
这里getArrayCollectionIndex是我自己定义的方法,你们可以不用考虑,value是你传入的Object对象,你可以自己定义ComboBox显示到多少位置,pointLabel是我定义的ArrayCollection对象。

当ComboBox更改时,需要你的主界面存储更改的值,就需要使用到dispatchEvent事件

protected function pointRankChange(event:ListEvent):void{// TODO Auto-generated method stubvar myEvent : ListEvent = new ListEvent("pointChange");myEvent.reason = ComBo.selectedLabel;this.parentApplication.dispatchEvent(myEvent);}
这里Combo是ComboBox的id号。


在主界面监听该方法,并且把itemRender设置为当前自定义的控件。

comboboxFactory = new ClassFactory(pointSymbol);addEventListener("pointChange",ComBoBoxChange);
然后
columnsPro.itemRenderer = comboboxFactory;

在主界面.mxml中,复写方法ComBoBoxChange即可。

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;}
contentGrid.dataProvider.setItemAt(item,index);
为了省事,我把值存到了event.reason属性中。


以上便是DataGrid自定义ComboBox并且获取其值,当然,自定义其余控件都可以。




2 0
原创粉丝点击