flex中AdvancedDataGrid列上的itemRenderer

需求:一个表格,在点击一个“添加”按钮时要动态的增加一行,且有下拉列表功能。

主文件:GridView.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:GridItem xmlns:mx="http://www.adobe.com/2006/mxml"
			 width="98%"
			 height="200"
			 xmlns:mate="http://mate.asfusion.com/"
			 xmlns:views="com.fisci.asia.fnt.view.*"
			 xmlns:components="com.hillelcoren.components.*" 
			 backgroundColor="#FBF888" 
			>

	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.controls.listClasses.*;
			
			[Bindable]
			public var ftType:String = "EFT";//EFT or AFT
			
			[Bindable]
			public var fntGridDataArrColl:ArrayCollection = new ArrayCollection();
			
			
			private function completeControl(evt:FlexEvent):void
			{
				//ren.cataGoryId.dataProvider = ren.cataGoryDpArrColl;
				//var ren:GridColumnRenderer =GridColumnRenderer( ClassFactory(adaGridColCataGoryId.itemRenderer).newInstance());
				///Alert.show("gridItemColRenderer="+ren.cataGoryId);
			//parentDocument.init(evt)
			
			}
		
			public function init(evt:FlexEvent):void
			{
				///obj.
				//AdvancedDataGridColumn(this.fntEFTGrid.getChildAt(2))
				//fntEFTGrid.AdvancedListBaseContentHolder141.GridColumnRenderer178.cataGoryId
				//Alert.show("called by gridColumn="+(AdvancedListBaseContentHolder(this.fntEFTGrid.getChildAt(2))));
				var ren:GridColumnRenderer =GridColumnRenderer( ClassFactory(adaGridColCataGoryId.itemRenderer).newInstance());
				ren.roGridCol.getCataGory();
			}
			
			private function addFntColumn(event:MouseEvent):void
			{ 
				var obj:Object = new Object();
				obj.FNT_TRADE_ID = "";
				obj.AMOUNT = 0.00;
				obj.FNT_TRANS_TYPE = "";
				fntGridDataArrColl.addItem(obj);
				fntEFTGrid.dataProvider = fntGridDataArrColl;
				
				//
				//var ren:GridColumnRenderer =GridColumnRenderer( ClassFactory(adaGridColCataGoryId.itemRenderer).newInstance());
				//Alert.show("gridItemColRenderer="+ren.cataGoryId);
			}
			
			public function myStyleFunc(data:Object,col:AdvancedDataGridColumn):Object
			{
				return {color:'black'};
			}

			//myADG.invalidateList(); 刷新表格
			


		]]>
	</mx:Script>
	
	<mx:VBox top="5"
			 paddingTop="8"
			 paddingLeft="10"
			 paddingBottom="8"
			 width="98%">
		<mx:Button label="{resourceManager.getString('resources','fnt.fntGridView.add.button')}"
				   click="addFntColumn(event)"/>
		<mx:AdvancedDataGrid id="fntEFTGrid"  dataProvider="{fntGridDataArrColl}"  
			width="98%" editable="true" styleFunction="myStyleFunc">
		
			<mx:columns><!--这里是设定列标题-->
				<mx:AdvancedDataGridColumn dataField="FNT_TRADE_ID"  editable="false"
					headerText="{resourceManager.getString('resources','fnt.fntGridView.cell.fntTradeId')}"/>
				<mx:AdvancedDataGridColumn dataField="AMOUNT"  editable="true"
					headerText="{resourceManager.getString('resources','fnt.fntGridView.cell.amount')}"/>
				<mx:AdvancedDataGridColumn dataField="FNT_TRANS_TYPE" editable="true"  id="adaGridColCataGoryId" 
					headerText="{resourceManager.getString('resources','fnt.fntGridView.cell.catagory')}" 
				   itemRenderer="{new ClassFactory(GridColumnRenderer)}"> 
					
				</mx:AdvancedDataGridColumn>	
			</mx:columns>
		</mx:AdvancedDataGrid>
	</mx:VBox>
</mx:GridItem>


itemRenderer文件GridColumnRenderer.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"  width="250"
	xmlns:components="com.hillelcoren.components.*"
	  initialize="init(event)">
	<mx:Script>
		<![CDATA[
		import mx.events.MenuEvent;
		import mx.controls.Alert;
		import com.fisci.asia.common.Constants;
		import mx.rpc.events.FaultEvent;
		import mx.rpc.events.ResultEvent;
		import mx.collections.ArrayCollection;
		import mx.events.FlexEvent;
		
		[Bindable]								
		public var text:String = "";
		[Bindable]
		public var code:String = "code";
		[Bindable]
		public var browserFieldsArry:Array = Constants.BROWSER_FIELDS_ARRY;
		
		[Bindable]
	    public var cataGoryDpArrColl:ArrayCollection = new ArrayCollection();
			
		private function completeControl(evt:FlexEvent):void
		{
			//this.cataGoryId.dataProvider = cataGoryDpArrColl;
			//Alert.show("gridItemColRenderer="+this.cataGoryId.dataProvider.length);
			
			//parentDocument.init(evt)
			
		}
		
		public function init(evt:FlexEvent):void
			{
				///obj.
				//AdvancedDataGridColumn(this.fntEFTGrid.getChildAt(2))
				//fntEFTGrid.AdvancedListBaseContentHolder141.GridColumnRenderer178.cataGoryId
				//Alert.show("called by gridColumn="+(AdvancedListBaseContentHolder(this.fntEFTGrid.getChildAt(2))));
				//var ren:GridColumnRenderer =GridColumnRenderer( ClassFactory(adaGridColCataGoryId.itemRenderer).newInstance());
				//Alert.show("length="+(cataGoryDpArrColl.length));
				if(cataGoryDpArrColl!=null && cataGoryDpArrColl.length == 0)
				  roGridCol.getCataGory();
				//Alert.show("dd="+ ren.cataGoryId );
			}	
		private function handleItemClick(event:MenuEvent):void
		{
			switch (String(event.item.@data))
			{
				case "browse":
					//Alert.show("at="+event.currentTarget);
					//Alert.show("cataCGory="+this.cataGoryDpArrColl);
					this.cataGoryId.dataProvider = this.cataGoryDpArrColl;
					cataGoryId.showBrowser();
				    break;
				case "remove":
					cataGoryId.selectedItems.removeAll();
					break;		
			}
		}
		

		
		private function handleResult(event:ResultEvent):void
		{
			cataGoryDpArrColl = event.result as ArrayCollection;
			//Alert.show("gridItemColRenderer="+cataGoryDpArrColl.length);
		}
			
		private function handleFault(e:FaultEvent):void
		{
			Alert.show(String(e.fault.message), "错误");
		}
			
		]]>
	</mx:Script>
	
	<mx:XML format="e4x" id="menuData">
		<root>
			<menuitem data="browse" label="browse"/>
			<menuitem data="remove" label="removeall"/>
		</root>
	</mx:XML>
	
	<mx:RemoteObject id="roGridCol" destination="bankAcctManager" 
		result="handleResult(event)" fault="handleFault(event)" showBusyCursor="true">
    </mx:RemoteObject>	
    
	<components:AdvancedAutoComplete id="cataGoryId" width="250" visible="true" includeInLayout="true"  
        itemClick="handleItemClick(event)"
        actionsMenuDataProvider="{menuData}" 
        matchType="anyPart"  
        text="{text}"
        labelField="{code}"
        browserFields="{browserFieldsArry}"
		allowMultipleSelection="false" 
		selectionLayout="horizontal" />
                        		
</mx:HBox>



你可能感兴趣的:(xml,Flex)