以下主要是我了解到的<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(); }