2012-05-23 36 views
0

我有一個2列的數據網格。每當第一列值發生變化時,我都需要訪問第二列的項目渲染器。即如果列1的值是A-需要顯示欄2中的文本字段,如果值是B,我需要顯示下拉菜單。獲取特定單元格的ItemRenderer - Flex DataGrid

Col1中---------- col2的

甲----------下拉

乙----------文本框

A ---------- DropDown

任何解決方案???

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。這正是我正在尋找的。 應該如何使用火花DataGrid以及? – Saju

0

使用ViewStack按需要的意見創建項目渲染器,並重寫數據功能,因爲通常對於項目渲染完成後,設置現場的容器底部活躍的孩子,如果你想設置好動的孩子飛看到這個post

希望幫助

+0

感謝伊姆蘭, 讓我嘗試解僱事件,如示例中所示。 – Saju

+0

我調度了一個自定義事件,但沒有捕獲到其他item-renderer(正在偵聽的一個)。 :( – Saju

+0

請分享你的代碼你做了什麼 – Imran

相關問題