今天我碰到的一个问题是:DataGrid对象某一列所对应的属性是一个复杂对象,比如DataGrid是要显示书的列表,使用python后台返回结果,其作者一列对应的是一个Author对象。现在我想在Book的"作者”这一列中显示作者名称。
解决方法:首先在mxml文件中,添加该列。
<mx:DataGridColumn id="colAuthor" headerText="作者" dataField="Author" width="100"/>。值得注意的是,这里的dataFiled必须就是其对应的属性。比如,DataGrid绑定的数据源是这样定义的:{"Bookname","Author","PublicDate"},其中Author定义为{“Name”,"Age","Gender","Nationality"}等等。
那么在这个DataGridColumn 中,dataField就必须指定为"Author".
其次,我们要修改这个DataGridColumn的列的显示内容(否则它只会显示”object“,显然不是我们想要的)。
private function formatAuthor(item:Object, c:DataGridColumn):String //定义要显示什么内容给这个column。
{
return item.Author.Name; //注意,这里直接写Author。因为item就是指Book对象。
}
然后将这个函数作为该column的labelFunction. colAuthor.labelFunction = formatAuthor; //设定LabelFunction.这里,colAuthor是该列的ID。这样便可以了。
还有另外一点值得说明:我们这样修改,到时候单击DataGrid头部标题进行排序时就会出问题。因为,DataGrid内部找不到对”Author“类型排序的函数。因为该列绑定的是”Authro“。所以我们必须显式提供一个排序函数。方法如下:
private function AuthorSortFunc(obj1:Object, obj2:Object):int
{
//这里调用了labelFunction来获得该列的内容。这样做是为了使得我们以后可以不用重复地写比较函数。
return ObjectUtil.stringCompare(colAuthor.labelFunction(obj1, colAuthor),colAuthor.labelFunction(obj2, colAuthor));
}
然后将这个函数作为该column的sortCompareFunction 。 colAuthor.sortCompareFunction = AuthorSortFunc; //设置排序函数
----David Cai 2009-08-22午于金山公司