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