Flex:在DataGrid中处理Column值的显示(原创)

今天我碰到的一个问题是: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 。    c olAuthor.sortCompareFunction = AuthorSortFunc; //设置排序函数

        ----David Cai 2009-08-22午于金山公司

你可能感兴趣的:(datagrid)