项目需要:在datagrid 中实现combobox联动
<?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>