flex datagrid 中实现combobox联动

                                                 flex datagrid 中实现combobox联动

     项目需要:在datagrid 中实现combobox联动

     我搞了好久都没有成功,最后在Flex终极幻想好友 北京——无阻(24070990)的帮助下终于做成功了。在这里对他说声谢谢。现在分享一下,实现的代码。

   源代码下载地址:http://download.csdn.net/detail/wuxiaokaixinguo/5216461

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			   xmlns:map="zdims.map.*" xmlns:control="zdims.control.*" xmlns:drawing="zdims.drawing.*"
			>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			//DataGrid中的数据源
			[Bindable]
			public var  dgColl:ArrayCollection = new ArrayCollection(
				[{logic:'并且',property:'FID',operator:'=',value:1}]
			);
			
			//逻辑数据源
			[Bindable]
			public var logicColl:ArrayCollection= new ArrayCollection(
				["并且","或者"]
			);
			
			//属性数据源
			[Bindable]
			public var propertyColl:ArrayCollection = new ArrayCollection(
				["FID","名称"]
			);
			
			//算法符数据源
			[Bindable]
			public var operatorColl:ArrayCollection = new ArrayCollection(
				["=",">","<",">=","<=","<>"]
			);
			[Bindable]
			public var operatorColl2:ArrayCollection = new ArrayCollection(
				["=","LIKE"]
			);
			//值也设置成下拉列表框
			[Bindable]
			public var valueColl:ArrayCollection = new ArrayCollection(
				["90","91","92","93","94","95"]
			);
			//================添加操作=============================
			public function btn_add_clickHandler():void{
				dgColl.addItem({logic:'并且',property:'FID',operator:'=',value:2});
				dgColl.refresh();
			}
			
			//================删除操作============================
			public function btn_del_clickHandler():void{
				if(dgComplex.selectedIndex==-1)
				{
					Alert.show("请选择一列删除!!!");
				}
				else
				{
					dgColl.removeItemAt(dgComplex.selectedIndex);
				}
			}
			
		
			
			
		]]>
	</fx:Script>
	
	
	<mx:DataGrid id="dgComplex" dataProvider="{dgColl}" editable="true" x="10" y="81" height="262" width="317">
		<mx:columns>
			<mx:DataGridColumn  headerText="逻辑" dataField="logic"  editorDataField="value" >
				<mx:itemEditor>
					<fx:Component>
						<mx:HBox>
							<fx:Script>
								<![CDATA[
									public function get value():Object                                          
									{                                                                           
										if(ddlLogic.selectedItem == null)
											return null;
										return ddlLogic.selectedItem;
									}                                                                           
									
									
									override public function set data(value:Object):void{
										super.data =value;
										for each(var item:Object in ddlLogic.dataProvider)
										{
											value.logic = ddlLogic.selectedItem;
										}
										
									}
								]]>
							</fx:Script>
							<s:DropDownList  id="ddlLogic" labelField="逻辑" dataProvider="{outerDocument.logicColl}" 
											 width="100%" selectedIndex="0"/>
						</mx:HBox>
					</fx:Component>
				</mx:itemEditor>
			</mx:DataGridColumn>
			
			<mx:DataGridColumn headerText="属性" dataField="property" editorDataField="value" >
				<mx:itemEditor>
					<fx:Component>
						<mx:HBox>
							<fx:Script>
								<![CDATA[
									public function get value():Object                                          
									{                                                                           
										if(ddlProperty.selectedItem == null)
											return null;
										return ddlProperty.selectedItem;
									}                                                                           
									
									
									override public function set data(value:Object):void{
										super.data =value;
										for each(var item:Object in ddlProperty.dataProvider)
										{
											value.property = ddlProperty.selectedItem;
										}
										
									}
								]]>
							</fx:Script>
							<s:DropDownList  id="ddlProperty" labelField="属性" dataProvider="{outerDocument.propertyColl}" 
											 width="100%" selectedIndex="0"/>
						</mx:HBox>
					</fx:Component>
				</mx:itemEditor>
			</mx:DataGridColumn>
			
			
			<mx:DataGridColumn headerText="运算符" dataField="operator" editorDataField="value" >
				<mx:itemEditor>
					<fx:Component>
						<mx:HBox>
							<fx:Script>
								<![CDATA[
									import mx.controls.DataGrid;
									import mx.controls.dataGridClasses.DataGridColumn;
									import mx.controls.Alert;
									public function get value():Object                                          
									{                                                                           
										if(ddlOperator.selectedItem == null)
											return null;
										return ddlOperator.selectedItem;
									}                                                                           
									
									
									override public function set data(value:Object):void{
										super.data =value;
										var dg:DataGrid = this.owner as DataGrid;
										
										if(dg && data)
										{
											var dg2:DataGridColumn  = dg.columns[1] as DataGridColumn;
											if(data[dg2.dataField]=="FID")
											{
												/* Alert.show("到此!!!"); */
												ddlOperator.dataProvider = outerDocument.operatorColl;
												for each(var item:Object in ddlOperator.dataProvider)
												{
													
													value.operator = ddlOperator.selectedItem;
													
												} 
											}
											if(data[dg2.dataField]=="名称")
											{
												ddlOperator.dataProvider = outerDocument.operatorColl2;
												for each(var item2:Object in ddlOperator.dataProvider)
												{
													
													value.operator = ddlOperator.selectedItem;
													
												} 
											}
											
										}
										
										
									}
								]]>
							</fx:Script>
							<s:DropDownList  id="ddlOperator" labelField="运算符"
											 width="100%" selectedIndex="0"/>
							<!-- dataProvider="{outerDocument.operatorColl}" -->
						</mx:HBox>
					</fx:Component>
				</mx:itemEditor>
			</mx:DataGridColumn>
			
			<mx:DataGridColumn headerText="值" dataField="value" editorDataField="value" >
				<mx:itemEditor>
					<fx:Component>
						<mx:HBox>
							<fx:Script>
								<![CDATA[
									public function get value():Object                                          
									{                                                                           
										if(ddlValue.selectedItem == null)
										{
											return ddlValue.text;
										}
										return ddlValue.selectedItem;
									}                                                                           
									
									
									override public function set data(value:Object):void{
										super.data =value;
										for each(var item:Object in ddlValue.dataProvider)
										{
											value.value = ddlValue.selectedItem;
										}
										
									}
								]]>
							</fx:Script>
							<mx:ComboBox  id="ddlValue" labelField="值" editable="true" dataProvider="{outerDocument.valueColl}" 
										  width="100%" selectedIndex="0"/>
						</mx:HBox>
					</fx:Component>
				</mx:itemEditor>
			</mx:DataGridColumn>
		</mx:columns>
		
	</mx:DataGrid>
	
	<s:Button x="13" y="364" width="56" height="27" label="添加" click="btn_add_clickHandler();"/>
	<s:Button x="78" y="364" width="56" height="27" label="删除" click="btn_del_clickHandler();"/>
</s:Application>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值