读书人

[Flex3]Flex DataGrid显现java List对

发布时间: 2012-09-16 17:33:16 作者: rapoo

[Flex3]Flex DataGrid展现java List对象的三种方式

以下主要是我了解到的<mx:DataGrid 标签中一些属性的使用,希望对正在研究flex的朋友们有点用

?

?

?

?下面是相关说明(java及配置部分省略)

?

?

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
????minWidth="955" minHeight="600" backgroundColor="white"
????creationComplete="onComplete()" horizontalAlign="left" layout="vertical"
????verticalAlign="top"? fontSize="12" xmlns:nsl="*">
?<mx:RemoteObject id="userAction" destination="userAction">
?</mx:RemoteObject>
?<mx:Script>
??<![CDATA[
???import mx.collections.ArrayCollection;
???import mx.controls.Alert;
???import mx.rpc.events.ResultEvent;
???import mx.collections.ArrayList;
???import flash.external.ExternalInterface;
???
???
???[Bindable]???
???public var userArr:Array=new Array();
???
???[Bindable]???
???public var userColls:ArrayCollection=new ArrayCollection();
???
???private function resultHandler(event:ResultEvent):void {
????userColls = event.result as ArrayCollection;
????userArr = userColls.toArray();
????Alert.show(userArr[1].toString(),"Title");
????
???}
???private function onComplete():void{
????userAction.getAllUser();
????userAction.addEventListener(ResultEvent.RESULT,resultHandler);
???}
???
???private function rowNum(oItem:Object,iCol:int):String??
??????????? {??
//????????????? Alert.show(iCol+"----"+oItem);??
?????????????? var iIndex:int = userColls.getItemIndex(oItem) + 1;??
?????????????? for(var i:int=0;i<userColls.length;i++){??
??????????????????? var user:Object=userColls[iIndex-1];??
??????????????????? user.num=iIndex+"";??
??????????????? }??
??????????????? return String(iIndex);??
??????????? }
??]]>
?</mx:Script>

?<mx:DataGrid id="dataProvider" dataProvider="{userColls}">
??<mx:columns>
???<mx:DataGridColumn? labelFunction="rowNum" headerText="序号"/>//labelFunction对应你想调用的函数,比如说这里是自动为每行生成行号,rowNum为函数名

???<mx:DataGridColumn dataField="userName" headerText="姓名"/> //dataField对应集合中对象属性
???<mx:DataGridColumn dataField="sex" headerText="性别"/>??//headerText对应值随便写
???<mx:DataGridColumn dataField="telephone" headerText="电话"/>
???<mx:DataGridColumn dataField="address" headerText="地址"/>
??</mx:columns>
?</mx:DataGrid>


?

第一种使用dataProvider属性,? userColls为mx.collections.ArrayCollection类型

<mx:DataGrid id="dg" dataProvider="{userColls}">
??<mx:columns>
???<mx:DataGridColumn? labelFunction="rowNum" headerText="序号"/> //labelFunction对应你想调用的函数,比如说这里是自动为每行生成行号,rowNum为函数名
???<mx:DataGridColumn dataField="userName" headerText="姓名"/>
???<mx:DataGridColumn dataField="sex" headerText="性别"/>
???<mx:DataGridColumn dataField="telephone" headerText="电话"/>
???<mx:DataGridColumn dataField="address" headerText="地址"/>
??</mx:columns>
?</mx:DataGrid>

或者在mxml方法中使用dg.dataProvider=userColls来赋值(dg为id)

?==============================

?

?<mx:DataGrid id="source" >
??<mx:dataProvider>
???<mx:ArrayCollection id="test"? source="{userArr}">
????</mx:ArrayCollection>
??</mx:dataProvider>
??<mx:columns>
???<mx:DataGridColumn? labelFunction="rowNum" headerText="序号"/>
???<mx:DataGridColumn dataField="userName" headerText="姓名"/>
???<mx:DataGridColumn dataField="sex" headerText="性别"/>
???<mx:DataGridColumn dataField="telephone" headerText="电话"/>
???<mx:DataGridColumn dataField="address" headerText="地址"/>
??</mx:columns>
?</mx:DataGrid>

?

第二种使用<mx:ArrayCollection 的source属性,source对应的值必须是和Array相关的类型,如果用这种方式,可以直接把获取到的userColls直接转为Array类型,即userColls.toArray()

=============================?

?

?<mx:DataGrid id="list" >
??<mx:dataProvider>
???<mx:ArrayCollection ?list="{userColls}" >
????</mx:ArrayCollection>
??</mx:dataProvider>
??<mx:columns>
???<mx:DataGridColumn? labelFunction="rowNum" headerText="序号"/>
???<mx:DataGridColumn dataField="userName" headerText="姓名"/>
???<mx:DataGridColumn dataField="sex" headerText="性别"/>
???<mx:DataGridColumn dataField="telephone" headerText="电话"/>
???<mx:DataGridColumn dataField="address" headerText="地址"/>
??</mx:columns>
?</mx:DataGrid>
</mx:Application>

第三种方式使用<mx:ArrayCollection 的list属性,list属性对应的值必须是实现或者和IList相关的类型

?

?以上三种最终显示结果一样

?

使用dataProvider属性可以为任意数据类型,api 中对各种数据相应的转换处理

?

API节选

?

 public function set dataProvider(value:Object):void    {        if (collection)        {            collection.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);        }        if (value is Array)        {            collection = new ArrayCollection(value as Array);        }        else if (value is ICollectionView)        {            collection = ICollectionView(value);        }        else if (value is IList)        {            collection = new ListCollectionView(IList(value));        }        else if (value is XMLList)        {            collection = new XMLListCollection(value as XMLList);        }        else if (value is XML)        {            var xl:XMLList = new XMLList();            xl += value;            collection = new XMLListCollection(xl);        }        else        {            // convert it to an array containing this one item            var tmp:Array = [];            if (value != null)                tmp.push(value);            collection = new ArrayCollection(tmp);        }        // get an iterator for the displaying rows.  The CollectionView's        // main iterator is left unchanged so folks can use old DataSelector        // methods if they want to        iterator = collection.createCursor();        collectionIterator = collection.createCursor(); //IViewCursor(collection);        // trace("ListBase added change listener");        collection.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler, false, 0, true);        clearSelectionData();        var event:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);        event.kind = CollectionEventKind.RESET;        collectionChangeHandler(event);        dispatchEvent(event);        itemsNeedMeasurement = true;        invalidateProperties();        invalidateSize();        invalidateDisplayList();    }

??

?

?

读书人网 >flex

热点推荐