2012-05-23 2 views
0

2 개의 열이있는 DataGrid가 있습니다. column-1 값이 변경 될 때마다 두 번째 열의 항목 렌더러에 액세스해야합니다. 즉 열 1의 값이 A이면 column2에 텍스트 필드를 표시해야하며 값이 B이면 드롭 다운을 표시해야합니다.특정 셀에 대한 ItemRenderer 가져 오기 - Flex DataGrid

COL1 ---------- Col2의

---------- 드롭

B ---------- 텍스트 상자

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"); 
    } 
} 
+0

당신이)합니다 (DataGrid.createItemRenderer를 생각 해 봤나? –

답변

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> 
+0

감사합니다. Mahesh. 이것은 내가 찾고있는 것입니다. Spark DataGrid에서도 작동해야합니까 ?? – Saju

0

필요에 따라 전망 ViewStack를 사용하여 아이템 렌더러를 생성하고 데이터를 같은 일반적으로이 post를보고 즉석에서 활성 아이를 설정하고자하는 경우, 필드의 컨테이너 기지의 활성 아이를 설정, 아이템 렌더러에 대해 수행 함수를 재정의

+0

Thanks Imran, 예제에 표시된대로 이벤트를 실행 해 봅니다. – Saju

+0

맞춤 이벤트를 전달했지만 다른 항목 렌더러 (수신 대기중인 항목)에는 캡처되지 않습니다. : – Saju

+0

코드를 공유하십시오. – Imran

관련 문제