码迷,mamicode.com
首页 > 其他好文 > 详细

Flex4.6 DataGrid自定义ComboBox并获取自定义ComboBox的值

时间:2015-07-05 18:38:43      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:adobe illustrator   c++   flex   

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

标签:adobe illustrator   c++   flex   

原文地址:http://blog.csdn.net/liming199364/article/details/46763837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!