首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

DataGrid显示数据库视图数据,该如何解决

2012-03-24 
DataGrid显示数据库视图数据我现在有个视图数据,要显示在DataGrid,用Hibernate做的pojo,不知道是否可以直

DataGrid显示数据库视图数据
我现在有个视图数据,要显示在DataGrid,用Hibernate做的pojo,
  不知道是否可以直接绑定到DataGrid中。。
  POJO: FlexViewSpBaseDetail.as
 

XML code
    [Bindable]    [RemoteClass(alias="com.jrosion.database.hibernate3.pojo.ViewSpBaseDetail")]        public class FlexViewSpBaseDetail    {                public var id: FlexViewSpBaseDetailId;                public function FlexViewSpBaseDetail()        {        }    }  

  
  POJO: FlexViewSpBaseDetailId.as

 
XML code
    [Bindable]    [RemoteClass(alias="com.jrosion.database.hibernate3.pojo.ViewSpBaseDetailId")]        public class FlexViewSpBaseDetailId    {        public var pk: String;            public var name: String;            public var no: String;            public var spType: String;            public var unitType: String;            public var priceMethod: String;        public function FlexViewSpBaseDetailId()        {        }    }


为什么我直接用id.name去绑定,数据显示不出,如何将视图的数据绑定到DataGrid, 
如果不行,我想就只能用labelFunction函数去做,这样是可以出来。。
但有个问题,我的DataGrid字段比较多,上面的我省略了一些,我看见DataGrid控件也有个labelFunction函数,可否写一个labelFunction函数,放在DataGrid里面,这样就不必要每个DataGridColumn都写一个labelFunction,不知道这样如何去做。。



[解决办法]
DataGrid里面的dataField应该不支持id.name这种的写法。他会去数据里面找data["id.name"]这个数值,而非data.id.name;
你说的写个LabelFunction,在DataGrid上面
从labelFunction参数里面得到dataField,用"."做split,本是这样访问的data["id.name"]改成
data["id"]["name"],这样好处是改动最小,确定如果是可编辑表格,在修改数据时,还是会有问题。会出提示数据没有id.name这个属性,因为表格内部在写入数据的地方,我想还是用data["id.name"]写入的

也可以去掉一层来解决这个问题,每行记录直接是一个FlexViewSpBaseDetailId类型的数据,
如果这样不行的话,在FlexViewSpBaseDetail类里面做一下代理或包装。
比如
public class FlexViewSpBaseDetail
{

public var id: FlexViewSpBaseDetailId;

public function FlexViewSpBaseDetail()
{
}

public function set name(value):void {
if (id == null) return;
id.name = value;
}
public function get name():String {
if (id == null) return null;

return id.name;
}

}
方案应该很多,找适合自己用的吧。
[解决办法]
你的 datagrid 的dataprovider 是一个 FlexViewSpBaseDetailId的arrayCollection 可以直接用datafield name

否则 只能用 lableFunction了
[解决办法]
是的 lableFunction 这个比简单点

热点排行