ljhjay

导航

Multiple list in a combobox

Test.mxml-----------------------

<?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"       xmlns:components="components.*" creationComplete="application1_creationCompleteHandler(event)"       >  <fx:Declarations>   <!-- 将非可视元素(例如服务、值对象)放在此处 -->  </fx:Declarations>  <fx:Script>   <![CDATA[    import TO.AlphaComposeValueTO;    import TO.ComposeValueTo;    import TO.TestTO;        import mx.collections.ArrayCollection;    import mx.events.FlexEvent;        public static const VALUE     : String = "value";    public static const DESCRIPTION    : String = "description";    public static const LONG_DESCRIPTION  : String = "longDescription";    [Bindable]    private var columns : Array = [DESCRIPTION,LONG_DESCRIPTION];    [Bindable]    public var _dataProvider:ArrayCollection=new ArrayCollection();    [Bindable]    public var tableTos : ArrayCollection = new ArrayCollection();        protected function application1_creationCompleteHandler(event:FlexEvent):void    {     // TODO Auto-generated method stub                    var avt : AlphaComposeValueTO = null;     avt = new AlphaComposeValueTO();     avt.value = 1;     avt.description = "ABCD";     avt.longDescription = "Long TEST1";     _dataProvider.addItem(avt);          avt = new AlphaComposeValueTO();     avt.value = 2;     avt.description = "AB1D";     avt.longDescription = "Long TEST2";     _dataProvider.addItem(avt);          avt = new AlphaComposeValueTO();     avt.value = 3;     avt.description = "IJKL";     avt.longDescription = "Long TEST3";     _dataProvider.addItem(avt);          avt = new AlphaComposeValueTO();     avt.value = 4;     avt.description = "MNOP";     avt.longDescription = "Long TEST4";     _dataProvider.addItem(avt);               var tto : TestTO = new TestTO();     var type:ComposeValueTo;     type.description="fuyun";     type.longDescription="yiqiefuyun";     /* tto.type=type; */          tto.amount=13;          /* tto.amount = 100;     tto.expirationDate = new Date(); */     tableTos.addItem(tto);         }        public function fx(item : Object, column:DataGridColumn) : String {     if (item != null && _labelField != null && _labelField != "" && dataField != null && dataField != "") {      if (item.hasOwnProperty(dataField) && item[dataField] != null) {       var _data : Object = item[dataField];       if (_data.hasOwnProperty(_labelField)) {        return _data[_labelField];        }      }     }          return     return null;              }       ]]>  </fx:Script>    <mx:DataGrid x="40" y="40" dataProvider="{tableTos}">   <mx:columns>    <mx:DataGridColumn headerText="amount" dataField="amount" labelFunction="fx">         </mx:DataGridColumn>    <!--<components:GuiDridColumn headerText="Type" dropdownColumns="{columns}"            dataProvider="{_dataProvider}" labelField="description">         </components:GuiDridColumn>-->   </mx:columns>  </mx:DataGrid> </s:Application>

GuiComboBox.as------------

package components {  import mx.controls.ComboBox;  import mx.core.ClassFactory;    public class GuiComboBox extends ComboBox  {   public function GuiComboBox()   {    super();   }      private var _dropdownColumns:Array = [];   public function get dropdownColumns():Array   {    return _dropdownColumns;   }      public function set dropdownColumns(value:Array):void   {    _dropdownColumns = value;    if (this.itemRenderer != null)    {     return;     }    var _renderer:ClassFactory;    _renderer = new ClassFactory(GuiComboBoxItemRender);    _renderer.properties = {"dropdownColumns": _dropdownColumns};    this.itemRenderer = _renderer;      }  }       }

GuiComboBoxItemRender.as..................

package components {  import mx.containers.Grid;  import mx.containers.GridItem;  import mx.containers.GridRow;  import mx.controls.Label;    public class GuiComboBoxItemRender extends Grid  {   private var _dropdownColumns:Array = []   private var labels : Array = new Array();   private var gridRow : GridRow = new GridRow();        public function GuiComboBoxItemRender()   {    super();    this.setStyle("width", "100%");    this.setStyle("height", "100%");    this.setStyle("horizontalGap", "0");    this.setStyle("verticalGap", "0");    this.setStyle("horizontalScrollPolicy", "off");    this.setStyle("verticalScrollPolicy", "off");    this.addElement(gridRow);   }      public function set dropdownColumns(value:Array):void   {    _dropdownColumns = value;    if (value != null && value.length > 0) {     for each(var key : String in value) {      var label : Label =  new Label();      var item : GridItem = new GridItem();            label.id = key;      labels[key] = label;      label.width = 100;      item.addElement(label);      gridRow.addElement(item);     }    }    invalidateProperties();    invalidateDisplayList();   }      override protected function commitProperties():void   {    super.commitProperties();    for each (var key in this._dropdownColumns) {     if (this.labels.hasOwnProperty(key)) {      (Label(labels[key])).text = (data == null? "" : data[key]);         }    }   }  } }

GuiDridColumn.as------------

package components {  import mx.controls.dataGridClasses.DataGridColumn;  import mx.core.ClassFactory;    public class GuiDridColumn extends DataGridColumn  {      private var _dataProvider:Object;      private var _dropdownColumns:Array = [];      public function GuiDridColumn(columnName:String=null)   {    super(columnName);    this.labelFunction = defaultDateLabelFunction;    var _renderer:ClassFactory;        _renderer = new ClassFactory(GuiComboBox);    this.itemRenderer = _renderer;   }      public function defaultDateLabelFunction(item : Object, column:DataGridColumn) : String {    if (item != null && _labelField != null && _labelField != "" && dataField != null && dataField != "") {     if (item.hasOwnProperty(dataField) && item[dataField] != null) {      var _data : Object = item[dataField];      if (_data.hasOwnProperty(_labelField)) {       return _data[_labelField];       }     }    }    return null;   }      private var _labelField : String;   public function get labelField():String   {    return _labelField;   }      public function set labelField(value:String):void   {    _labelField = value;       }      public function get dataProvider():Object   {    return _dataProvider;   }

  public function set dataProvider(value:Object):void   {    _dataProvider = value;   }

  public function get dropdownColumns():Array   {    return _dropdownColumns;   }   public function set dropdownColumns(value:Array):void   {    this._dropdownColumns = value;

  }  } }

----

AlphaComposeValueTO
ComposeValueTo
GuiDataGridTO
TestTO

 

posted on 2012-02-07 00:05  ljhjay  阅读(213)  评论(0编辑  收藏  举报