我有一個數據網格表,dataGrid表中的gridColumn調用「DropDownListItemRenderer」。使用相同的項目渲染器,我想根據dataField名稱更改下拉列表中的內容。例如,如果dataField名稱是彩色的,那麼下拉菜單將包含紅色,藍色,綠色等。如果dataField名稱是furits,那麼下拉列表將包含不同的水果選項。Flex:如何重用Item渲染器?
如果你看看我的項目渲染器中的代碼。我試圖通過創建一個名爲dropDownListData的可綁定數組集合來完成上述操作。在覆蓋設置數據函數我得到dataField名稱,使用數據字段名稱,我相應地添加數組集合中的項目。
儘管在運行程序時下拉列表中填充了正確的數據。每當選擇下拉列表時,下拉列表中的數據會重複並增加。
我想我沒有使用正確的方法來做到這一點。那麼有人能告訴我我是怎麼做到的?請有人可以幫我解決這個問題嗎?請讓我知道,如果我的問題不明確,我會嘗試重述它。
謝謝:)
這是我的MXML文件:
<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">
<fx:Script>
<![CDATA[
import FrontEndObjects.ColourItems;
import mx.collections.ArrayCollection;
import spark.events.IndexChangeEvent;
[Bindable]
private var order:ArrayCollection = new ArrayCollection();
private function addOrder():void{
var orderItems:ColourItems = new ColourItems();
order.addItem(orderItems);
}
]]>
</fx:Script>
<s:BorderContainer x="175" y="101" width="606" height="289">
<s:DataGrid id="myDG" x="53" y="27" width="516" height="201" dataProvider="{order}"
editable="true" variableRowHeight="true">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="label1" headerText="Order #" editable="true"/>
<s:GridColumn dataField="quant" headerText="Qty" editable="true"/>
<s:GridColumn dataField="color" headerText="Color" editable="true" rendererIsEditable="true" itemRenderer="myRenderers.DropDownListItemRenderer"/>
<s:GridColumn dataField="furits" headerText="Furits" editable="true" rendererIsEditable="true" itemRenderer="myRenderers.DropDownListItemRenderer"/>
</s:ArrayList>
</s:columns >
</s:DataGrid>
<s:Button x="499" y="236" label="add" click="addOrder()" />
</s:BorderContainer>
這是我的DropDownList項目渲染:
<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" clipAndEnableScrolling="true">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import spark.components.gridClasses.GridColumn;
import spark.events.IndexChangeEvent;
public var cName:String;
[Bindable]
private var dropDownListData:ArrayCollection = new ArrayCollection();
protected function onCbChange(event:IndexChangeEvent):void
{
var value:String = (event.currentTarget as DropDownList).selectedItem;
data[column.dataField] = value;
}
override public function set data(value:Object):void
{
super.data = value;
cName = column.dataField;
if(cName == "color"){
dropDownListData.addItem("red");
dropDownListData.addItem("blue");
dropDownListData.addItem("green");
}
else if(cName == "furits"){
dropDownListData.addItem("banana");
dropDownListData.addItem("apple");
dropDownListData.addItem("grapes");
}
}
]]>
</fx:Script>
<s:DropDownList id="cb" width="100%" change="onCbChange(event)" requireSelection="true" dataProvider="{dropDownListData}"/>
這是我的鄂畢JECT類:
public class ColourItems
{
public var label1:String;
public var quant:String;
public var color:String;
public var furits:String;
}
難明白這個代碼,請創建「一個基於文件」的例子 – 2013-03-11 14:39:27
llya嗨! 「一個基於文件」是否意味着把所有內容放在一個MXML文件中?現在,我再次編輯了我的問題以顯示我的所有代碼。你可以複製粘貼代碼並在你的電腦上運行。我有一個MXML文件,一個Item渲染器文件和一個colourItems類。希望這更清楚。請讓我知道我能做些什麼來使我的代碼更加清晰。謝謝:) – user2017147 2013-03-12 12:43:04