2012-05-23 34 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

相关问题