0

2列のデータグリッドがあります。列1の値が変更されるたびに、2番目の列のアイテムレンダラーにアクセスする必要があります。つまり、列1の値がA-列2にテキストフィールドを表示する必要があり、値がBの場合、ドロップダウンを表示する必要があります。

Col1----------Col2

A----------ドロップダウン

B ---------- TextBox

A----------ドロップダウン

任意のソリューション???

public class ItemRendererfroDropTest extends GridItemRenderer
{
    private var dropdown:DropDownList;
    public function ItemRendererfroDropTest()
    {
        super();
        dropdown=new DropDownList();
        dropdown.dataProvider=new ArrayCollection(new Array("ABC","PQR"));
        this.addElement(dropdown);
        dropdown.addEventListener(FlexEvent.VALUE_COMMIT,dataChanged);
    }

    private function dataChanged(event:FlexEvent):void
    {
        owner.dispatchEvent(new CustomEvent(CustomEvent.DATA_CHANGED,true));
    }

}


public class ItemRenderlabel extends GridItemRenderer
{
    public var wlabel:Label=new Label();
    public var checkbox:CheckBox=new CheckBox();

    public function ItemRenderlabel()
    {
        super();
        this.addEventListener(CustomEvent.DATA_CHANGED,mappingChanged,true);
        this.addElement(wlabel);
    }
    private function mappingChanged(e:CustomEvent):void
    {
        Alert.show("asfAS");
    }
}
4

2 に答える 2

0

必要に応じてビューを備えたViewStackを使用してアイテムレンダラーを作成し、アイテムレンダラーで通常行われるようにデータ関数をオーバーライドして、フィールドのコンテナーベースのアクティブな子を設定します。アクティブな子をオンザフライで設定する場合は、この投稿を参照してください

お役に立てば幸い

于 2012-05-23T06:51:51.210 に答える
0

以下のコードからいくつかのアイデアを得ることができます。-個々の行を更新してdpHierarchy.itemUpdated()を使用することにより、特定のアイテムに対してのみ実行できるイベント。

<?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"
               creationComplete="init()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable]
            private var dpHierarchy:ArrayCollection= new ArrayCollection([
                {name:"A", region: "Arizona"},
                {name:"B", region: "Arizona"},
                {name:"C", region: "California"},
                {name:"D", region: "California"}
            ]); 

            private function init():void
            {
                this.addEventListener(FlexEvent.DATA_CHANGE, changeDataHandler);
            }

            private function changeDataHandler(event:FlexEvent):void
            {
                dpHierarchy.refresh();
            } 
        ]]>
    </fx:Script>

    <mx:AdvancedDataGrid id="myADG" 
                         width="100%" height="100%" 
                         variableRowHeight="true" dataProvider="{dpHierarchy}">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="name" headerText="Name" itemRenderer="AddComboboxADG"/>
            <mx:AdvancedDataGridColumn dataField="region" headerText="Region" itemRenderer="SelectedCustomComponent"/>
        </mx:columns>   

    </mx:AdvancedDataGrid>

</s:Application>

//AddComboboxADGカスタムアイテムレンダラー

<?xml version="1.0" encoding="utf-8"?>
<s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                                  xmlns:s="library://ns.adobe.com/flex/spark" 
                                  xmlns:mx="library://ns.adobe.com/flex/mx" 
                                  focusEnabled="true">
    <fx:Script>
        <![CDATA[
            import mx.controls.AdvancedDataGrid;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderRenderer;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
            import mx.events.AdvancedDataGridEvent;
            import mx.events.DataGridEvent;
            import mx.events.FlexEvent;
            import mx.events.ItemClickEvent;

            import spark.components.supportClasses.ItemRenderer;
            import spark.events.IndexChangeEvent;


            protected function comboBoxID_changeHandler(event:IndexChangeEvent):void
            {
                data.name = comboBoxID.selectedItem;
                dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE, true));
            }

            override public function set data(value:Object):void
            {
                super.data = value;

                if(data.name == "A")
                {
                    comboBoxID.selectedIndex = 0;
                }else if(data.name == "B")
                {
                    comboBoxID.selectedIndex = 1;
                }else if(data.name == "C")
                {
                    comboBoxID.selectedIndex = 2;   
                }else
                {
                    comboBoxID.selectedIndex = 3;
                }
            }

        ]]>
    </fx:Script>

    <s:DropDownList id="comboBoxID" change="comboBoxID_changeHandler(event)">
        <s:ArrayCollection>
            <fx:String>A</fx:String>
            <fx:String>B</fx:String>
            <fx:String>C</fx:String>
            <fx:String>D</fx:String>
        </s:ArrayCollection>
    </s:DropDownList>
</s:MXAdvancedDataGridItemRenderer>

//SelectedCustomComponentカスタムアイテムレンダラー

<?xml version="1.0" encoding="utf-8"?>
<s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                                  xmlns:s="library://ns.adobe.com/flex/spark" 
                                  xmlns:mx="library://ns.adobe.com/flex/mx" 
                                  focusEnabled="true">
    <fx:Script>
        <![CDATA[
            override public function set data(value:Object):void
            {
                super.data = value;
                customFirstDropDown.visible = customTextInput.visible = customSecondDropDown.visible = lblData.visible = false;

                if(data.name == "A")
                {
                    customFirstDropDown.visible = true;
                }else if(data.name == "B")
                {
                    customTextInput.visible = true;
                }else if(data.name == "C")
                {
                    customSecondDropDown.visible = true;    
                }else
                {
                    lblData.visible = true;
                }
            }
        ]]>
    </fx:Script>

    <s:DropDownList id="customFirstDropDown" visible="false" selectedIndex="0">
        <s:ArrayCollection>
            <fx:String>First</fx:String>
            <fx:String>Second</fx:String>
            <fx:String>Third</fx:String>
        </s:ArrayCollection>
    </s:DropDownList>
    <s:TextInput id="customTextInput" visible="false" text="Selected"/>
    <s:DropDownList id="customSecondDropDown" visible="false" selectedIndex="0">
        <s:ArrayCollection>
            <fx:String>1</fx:String>
            <fx:String>2</fx:String>
            <fx:String>3</fx:String>
        </s:ArrayCollection>
    </s:DropDownList>   

    <s:Label id="lblData" visible="false" text="Selected"/>
</s:MXAdvancedDataGridItemRenderer>
于 2012-05-24T10:01:49.060 に答える