1

私はフレックスに非常に慣れていません。dataGrid テーブルに dropDownList を正常に追加しました。dropdownList は正常に動作します。私はユーザーのためにこれを行っているので、それだけです。セルをクリックすると、dropDownList が表示されて選択できるようにする代わりに、dataGrid テーブルで dropDowList コンポーネント/アイコン自体を表示できるようにしたいと考えています。これを達成することは可能ですか?? フレックススキンなどを使用する必要がありますか? どうすればこれを達成できるかを教えてください。可能であれば、例を挙げてください。

ありがとうレカ

これは私が今持っているコードです:

 <fx:Script>
    <![CDATA[                
        import mx.collections.ArrayCollection;
        import spark.events.IndexChangeEvent;
        import mx.controls.Alert;
        [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="29" y="33" 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>              
                            <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" skinClass="MySkins.mytestddbSkin">
                                <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

1

ItemEditor の代わりに ItemRenderer を使用できます。この場合、GridColumn の rendererIsEditable プロパティを true に設定する必要があります。

次に、DropDownList の変更イベントを使用して、データ プロバイダーに変更を登録できます。

選択後にデータが実際に編集されていることを確認できるように、色の列を 2 回追加しました。

ここに画像の説明を入力

<?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">
<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="29" y="33" 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" width="120"/>       

            <s:GridColumn dataField="color" headerText="Color" editable="true" rendererIsEditable="true" width="180">
                <s:itemRenderer>
                <fx:Component>
                    <s:GridItemRenderer>
                        <fx:Script>
                            <![CDATA[
                                import spark.events.IndexChangeEvent;

                                protected function onCbChange(event:IndexChangeEvent):void
                                {
                                    var value:String = (event.currentTarget as DropDownList).selectedItem;
                                    data[column.dataField] = value; 
                                }
                            ]]>
                        </fx:Script>

                        <s:DropDownList id="cb" requireSelection="true" width="100%" change="onCbChange(event)">
                            <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:GridItemRenderer>
                </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>

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

</s:Application>
于 2013-01-29T10:08:40.180 に答える