0

データグリッドテーブルがあります。dataGridテーブルのgridColumnは「DropDownListItemRenderer」を呼び出します。同じアイテムレンダラーを使用して、dataField名に従ってドロップダウンリストの内容を変更したいと思います。したがって、たとえば、dataField名がcolorの場合、ドロップダウンには赤、青、緑の電気ショック療法が含まれます。dataField名がfuritsの場合、ドロップダウンリストにはさまざまなフルーツオプションが含まれます。

私のアイテムレンダラーのコードを見てください。dropDownListDataというバインド可能な配列コレクションを作成して、上記を実行しようとしました。オーバーライドセットデータ関数で、dataField名を取得します。データフィールド名を使用して、それに応じて配列コレクションに項目を追加します。

プログラムを実行すると、ドロップダウンリストに正しいデータが表示されますが。ドロップダウンリストのデータは、ドロップダウンリストが選択されるたびに繰り返され、増加します。

私はこれを行うために正しい方法を使用していないと思います。だから誰かが私がこれを行う方法を教えてもらえますか?plsは誰かがこれで私を助けることができますか?質問が明確でない場合は、言い換えてみます。

ありがとう :)

これは私の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}"/>    

これは私のオブジェクトクラスです:

public class ColourItems
{
    public var label1:String;
public var quant:String;
public var color:String;    
public var furits:String;       
}
4

2 に答える 2

0

ターゲット列を編集可能として設定します: editable="true" rendererIsEditable="true"。セルをクリックすると、グリッドは itemrenderer の set data(value:Object) メソッドを呼び出し、ドロップダウン リストに項目を追加します。セルの編集を無効にして簡単に修正できます。

<s:GridColumn dataField="color" headerText="Color" editable="false" itemRenderer="myRenderers.DropDownListItemRenderer"/>  
<s:GridColumn dataField="furits" headerText="Furits" editable="false" itemRenderer="myRenderers.DropDownListItemRenderer"/>
于 2013-03-25T11:52:26.987 に答える
0

itemRenderer の setData メソッドでは、addItem を実行する前に、リストに既に存在するデータを確認する必要があります。

于 2013-03-13T10:28:27.543 に答える