0

DataGrid テーブルに DropDownList を追加しようとしています。ユーザーがドロップダウン リストからアイテムを選択した後、選択したアイテムが反映されないか、選択されませんでした。ComboBoxGridItemEditor を使用して、求めている結果を達成できることを知っています。しかし、コンボ ボックスは編集可能です。ユーザーが編集するのではなく、リスト内の選択肢の 1 つから選択するだけです。これが、dataGrid に dropDownList を追加しようとする私の理由です。

ドロップダウン リストで選択した項目を認識して dataGrid のセルの値を更新し、その値をデータ プロバイダーに保存する方法を教えてください。

問題 : 青を選択しようとすると、セルが更新されず、代わりに赤のままになります。

ありがとうレカ。

 <fx:Script>
    <![CDATA[                
        import mx.collections.ArrayCollection;      
        [Bindable]
        private var myDP:ArrayCollection = new ArrayCollection([
            {label1:"Order #2314", quant:3, color:'red'},
            {label1:"Order #2315", quant:3, color:'red'}     
        ]); 


    ]]>
</fx:Script>

<s:DataGrid id="myDG" x="85" y="57" width="393" height="151" dataProvider="{myDP}"
            editable="true" variableRowHeight="true">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="label1" headerText="Order #" editable="false"/>                
            <s:GridColumn dataField="quant" headerText="Qty" editable="true"/>

            <s:GridColumn dataField="color" headerText="Color" editable="true">                     
                <s:itemEditor>
                    <fx:Component>                              
                        <s:GridItemEditor>                          
                            <s:DropDownList id="myDropList" requireSelection="true">
                                <s:dataProvider>
                                    <s:ArrayCollection>
                                        <fx:String>red</fx:String>
                                        <fx:String>blue</fx:String>
                                        <fx:String>green</fx:String>
                                    </s:ArrayCollection>                                        
                                </s:dataProvider>
                            </s:DropDownList>                               
                        </s:GridItemEditor>                         
                    </fx:Component>
                </s:itemEditor>                 
            </s:GridColumn> 

        </s:ArrayList> 
    </s:columns >
</s:DataGrid>   
4

1 に答える 1

0

data getter/setter method基本的に、変更された selectedItem をカスタム itemrenderer からarraycollection に更新/保存する必要があります。

data[column.dataField] = value;arraycollection へのこの行の saveback を見てください。

<s:GridColumn dataField="color" headerText="Color" editable="true">                     
    <s:itemEditor>
        <fx:Component>                              
            <s:GridItemEditor>              
            <fx:Script>
                <![CDATA[

                    import mx.core.FlexGlobals;
                    import mx.events.FlexEvent;

                    import spark.events.IndexChangeEvent;

                    override public function set value(newValue:Object):void {

                        cb.selectedItem = newValue;
                    }

                    override public function get value():Object {
                        return cb.selectedItem.toString();
                    }

                    override public function setFocus():void {
                        cb.setFocus();
                    }

                    override public function save():Boolean
                    {
                        data[column.dataField] = value;                                     
                        return true;
                    }
                ]]>
            </fx:Script>
            <s:DropDownList id="cb" requireSelection="true">
                <s:dataProvider>
                    <s:ArrayCollection>
                        <fx:String>red</fx:String>
                        <fx:String>blue</fx:String>
                        <fx:String>green</fx:String>
                    </s:ArrayCollection>                                        
                </s:dataProvider>
            </s:DropDownList>                               
        </s:GridItemEditor>                         
    </fx:Component>
</s:itemEditor>                 

于 2013-01-28T10:14:23.703 に答える